我想将这个结果合并成2行,任何方式来做到这一点?提前致谢 !SQL Server:合并没有重复的子查询
当前的结果:
cust-no document order-no Black Description Black CR Yellow Description Yellow CR
CE074L00 10012107 0 NULL NULL 841437 P.CART YLW C3501S; -5
CE074L00 10012107 0 NULL NULL 841696 P.CART YLW C5502S; -7
CE074L00 10012107 0 841436 P.CART BLK C3501S; -8 NULL NULL
CE074L00 10012107 0 841695 P.CART BLK C5502S; -3 NULL NULL
预期结果:
cust-no document order-no Black Description Black CR Yellow Description Yellow CR
CE074L00 10012107 0 841436 P.CART BLK C3501S; -8 841437 P.CART YLW C3501S; -5
CE074L00 10012107 0 841436 P.CART BLK C3501S; -3 841696 P.CART YLW C5502S; -7
当前的SQL查询:
select
a.[cust-no], a.[document],a.[order-no],
a.[Black Description],a.[Black CR],a.[Yellow Description],a.[Yellow CR]
from
(select
i1.[cust-no], i1.[document], i1.[order-no],
il1.[description] [Black Description],
il1.[qty-shipped] [Black CR], null [Yellow Description],
null [Yellow CR]
from
invoice i1
inner join
[invoice-line] il1 on il1.[document] = i1.[document]
inner join
toner t on t.[edp code] = il1.[item-no]
and t.[color] = 'black' and i1.[dbill-type] = 'PS'
and i1.[invoice-date] > '2015-01-01'
and i1.[order-code] = 'FOCA'
and i1.[cust-no] = 'CE074L00'
union
select
i1.[cust-no], i1.[document], i1.[order-no],
null [Black Description], null [Black CR],
il1.[description] [Yellow Description],il1.[qty-shipped] [Yellow CR] from invoice i1
inner join [invoice-line] il1 on il1.[document] = i1.[document] inner join
toner t on t.[edp code] = il1.[item-no] and t.[color] = 'yellow' and i1.[dbill-type] = 'PS'
and i1.[invoice-date] > '2015-01-01'
and i1.[order-code] = 'FOCA'
and i1.[cust-no] = 'CE074L00') a
的修改,但查询还是只显示一行,不知道如何使用RowNo:
SELECT
a.[cust-no],
a.[document],
a.[order-no],
MAX(CASE WHEN a.[color] = 'black' THEN a.[description] END) AS [Black Description],
MAX(CASE WHEN a.[color] = 'black' THEN a.[qty-shipped] END) AS [Black CR],
MAX(CASE WHEN a.[color] = 'yellow' THEN a.[description] END) AS [Yellow Description],
MAX(CASE WHEN a.[color] = 'yellow' THEN a.[qty-shipped] END) AS [Yellow CR]
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY i1.[cust-no],i1.[document],i1.[order-no] ORDER BY i1.[cust-no] desc) AS RowNo,
i1.[cust-no],i1.[document],i1.[order-no],t.[color],il1.[description],il1.[qty-shipped]
FROM
invoice i1
INNER JOIN
[invoice-line] il1
ON
il1.[document] = i1.[document]
INNER JOIN
toner t
ON
t.[edp code] = il1.[item-no]
WHERE
t.[color] IN('black', 'yellow')
and i1.[dbill-type] = 'PS'
and i1.[invoice-date] > '20150101'
and i1.[order-code] = 'FOCA'
and i1.[cust-no] = 'CE074L00'
) AS a
GROUP BY
a.[cust-no],
a.[document],
a.[order-no]
被修改的查询的结果:
cust-no document order-no Black Description Black CR Yellow Description Yellow CR
CE074L00 10012107 0 841695 P.CART BLK C5502S; -3 841696 P.CART YLW C5502S; -5
数据来进行测试:
create table #Invoice(
[document] int,
[cust-no] varchar(15),
[order-no] int,
[dbill-type] varchar(15),
[invoice-date] datetime,
[order-code] varchar(15))
create table #Invoice_line(
[document] int,
[item-no] int,
[description] varchar(100),
[qty-shipped] int)
create table #toner(
[edp code] int,
[color] varchar(15))
insert into #invoice values (10012107,'CE074L00',0,'PS','2015-03-01','FOCA')
insert into #Invoice_line values (10012107,841436,'841436 P.CART BLK C3501S;',-8)
insert into #Invoice_line values (10012107,841695,'841695 P.CART BLK C5502S;',-3)
insert into #Invoice_line values (10012107,841437,'841437 P.CART YLW C3501S;',-5)
insert into #Invoice_line values (10012107,841696,'841696 P.CART YLW C5502S;',-7)
insert into #toner values(841436,'black')
insert into #toner values(841695,'black')
insert into #toner values(841437,'yellow')
insert into #toner values(841696,'yellow')
查询来测试:
SELECT
a.[cust-no],
a.[document],
a.[order-no],
MAX(CASE WHEN a.[color] = 'black' THEN a.[description] END) AS [Black Description],
MAX(CASE WHEN a.[color] = 'black' THEN a.[qty-shipped] END) AS [Black CR],
MAX(CASE WHEN a.[color] = 'yellow' THEN a.[description] END) AS [Yellow Description],
MAX(CASE WHEN a.[color] = 'yellow' THEN a.[qty-shipped] END) AS [Yellow CR]
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY i1.[cust-no],i1.[document],i1.[order-no] ORDER BY i1.[cust-no] desc) AS RowNo,
i1.[cust-no],i1.[document],i1.[order-no],t.[color],il1.[description],il1.[qty-shipped]
FROM
#invoice i1
INNER JOIN
#invoice_line il1
ON
il1.[document] = i1.[document]
INNER JOIN
#toner t
ON
t.[edp code] = il1.[item-no]
WHERE
t.[color] IN('black', 'yellow')
and i1.[dbill-type] = 'PS'
and i1.[invoice-date] > '20150101'
and i1.[order-code] = 'FOCA'
and i1.[cust-no] = 'CE074L00'
) AS a
GROUP BY
a.[cust-no],
a.[document],
a.[order-no]
您当前的查询结果是什么? –