求一个SQL ,多表合并. 列变行 ...
有5个表 ...
表1
QCRD QCRDES QNUM
1001 玉米 100101
1002 小麦 100201
表2
QNUM QSDES
100101 大小
100201 重量
表3
QYM REF QNUM QAW
QY01 331 100101 1
QY02 332 100201 2
表4
QYM PNUM REF
QY01 P001 331
表5
PNUM REF RDES
P001 331 AAA
想要达到的效果 ..
REF RDES 大小 重量
331 AAA 1 1
大小和重量就是 QNUM 只不过需要横向展示 ,大小重量的1 代表表3中的QAW
[最优解释]
---TableA
if OBJECT_ID('TableA','u') is not null
drop table TableA
create table TableA
(
QNUM int,
QSDES nvarchar(10)
)
insert into TableA
select 100101,'大小' union all
select 100102,'重量'
---TableB
if OBJECT_ID('TableB','u') is not null
drop table TableB
create table TableB
(
QYM nvarchar(10),
REF int,
QNUM int,
QAW int
)
insert into TableB
select 'QY01',331,100101,1 union all
select 'QY02',332,100102,2
---TableC
if OBJECT_ID('TableC','u') is not null
drop table TableC
create table TableC
(
QYM nvarchar(10),
PNUM nvarchar(10),
REF int
)
insert into TableC
select 'QY01','P001',331
---TableD
if OBJECT_ID('TableD','u') is not null
drop table TableD
create table TableD
(
PNUM nvarchar(10),
REF int,
RDES nvarchar(10)
)
insert into TableD
select 'P001',331,'AAA'
---修改了楼主的数据
---不然没法得到重量
update TableB set QYM='QY01',REF=331 where REF=332
---SQL
select F.REFE,F.RDESE,
sum(case when QSDESE='大小' then QAWE else null end) as 大小,
sum(case when QSDESE='重量' then QAWE else null end) as 重量
from
(select D.REF REFE,D.RDES RDESE,B.QAW QAWE,A.QSDES QSDESE
FROM TableD D
inner join TableC C on D.PNUM = c.PNUM
inner join TableB B on C.QYM = B.QYM
inner join TableA A on B.QNUM = A.QNUM) as F
group by REFE,RDESE
---结果集
--331AAA 1 2
[其他解释]
无非就是 连接 表 咯
[其他解释]
由于表2
QNUM QSDES
100101 大小
100201 大小
QSDES 有些是 一样的.
[其他解释]
个人拙见:感觉你给出的数据有点少哦,像表2中的数据有可能会是这样的:
表2:
QNUM QSDES
100101 大小
100201 重量
100301 大小
100401 大小
100501 重量
是吗?
其他的表中会不会也有类似的情况?像表3
QYM REF QNUM QAW
QY01 331 100101 1
QY02 332 100201 2
QY03 331 100101 2
QY04 332 100201 1
会不会有这样的情况呢?其他表是否也存在类似情况?
你需要的查询条件是什么?以REF这一列中值是331的来查询?
如有不当之处,还请多多指教。
[其他解释]
非常感谢 ..~~!!!