有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
---结果集
--331 AAA 1 2
------其他解决方案--------------------
无非就是 连接 表 咯
------其他解决方案--------------------
由于表2
QNUM QSDES
100101 大小
100201 大小
QSDES 有些是 一样的.
------其他解决方案--------------------
个人拙见:感觉你给出的数据有点少哦,像表2中的数据有可能会是这样的:
表2:
QNUM QSDES