2017-05-09 44 views
0

我需要在SQL Server 2005中的查询,以便从多行结果合并成一个单一的排显示在SQL Server 2005中多行的结果为单行

我拥有的数据涉及到服装的尺寸是这样的:

# Item No. Garment SKU In Stock  
1 CUR211NA-L CUR211NA 0.00  
2 CUR211NA-LB CUR211NA 10.00 
3 CUR211NA-M CUR211NA 0.00  
4 CUR211NA-MB CUR211NA 3.00  
5 CUR211NA-S CUR211NA 0.00  
6 CUR211NA-SB CUR211NA -9.00 
7 CUR211NA-XL CUR211NA 0.00  
8 CUR211NA-XXL CUR211NA 0.00  
9 CUR211NA-YTH CUR211NA 7.00  

我需要显示在列单SKU代码行与尺寸是这样的:

SB MB LB YTH S M L XL XXL 
CUR211NA -9 3 10 7 0 0 0 0 0 

我到目前为止这是正确显示的数量,但将每一个项目上单行

SELECT distinct T0.[U_GarmentSKU], T0.[U_Garment_Title], 

(select T0.[OnHand] from oitm t1 where T0.[U_GarmentSize] IN ('47900') and t0.itemcode=t1.itemcode) 'SB', 
(select T0.[OnHand] from oitm t1 where T0.[U_GarmentSize] IN ('39600') and t0.itemcode=t1.itemcode) as 'MB', 
(select T0.[OnHand] from oitm t1 where T0.[U_GarmentSize] IN ('38500') and t0.itemcode=t1.itemcode) as 'LB', 
(select T0.[OnHand] from oitm t1 where T0.[U_GarmentSize] IN ('50100') and t0.itemcode=t1.itemcode) as 'YTH', 
(select T0.[OnHand] from oitm t1 where T0.[U_GarmentSize] IN ('47700') and t0.itemcode=t1.itemcode) as 'S', 
(select T0.[OnHand] from oitm t1 where T0.[U_GarmentSize] IN ('39400') and t0.itemcode=t1.itemcode) as 'M', 
(select T0.[OnHand] from oitm t1 where T0.[U_GarmentSize] IN ('38300') and t0.itemcode=t1.itemcode) as 'L', 
(select T0.[OnHand] from oitm t1 where T0.[U_GarmentSize] IN ('49200','48700') and t0.itemcode=t1.itemcode) as 'XL', 
(select T0.[OnHand] from oitm t1 where T0.[U_GarmentSize] IN ('49700','49300') and t0.itemcode=t1.itemcode) as 'XXL', 
(select T0.[OnHand] from oitm t1 where T0.[U_GarmentSize] IN ('49800') and t0.itemcode=t1.itemcode) as 'XXXL' 

FROM OITM T0 WHERE T0.[U_GarmentSKU] like 'SUR%' and T0.[U_StkStat] = 'G' 

回答

1

请勿使用子查询。要么使用pivot(当然,不是在SQL Server 2005)或有条件聚集:

SELECT T0.[U_GarmentSKU], T0.[U_Garment_Title], 
     SUM(CASE WHEN T0.[U_GarmentSize] IN ('47900') THEN T0.[OnHand] ELSE 0 
      END) as SB, 
     . . . 
FROM OITM T0 
WHERE T0.[U_GarmentSKU] like 'SUR%' and T0.[U_StkStat] = 'G' 
GROUP BY T0.[U_GarmentSKU], T0.[U_Garment_Title]; 
0

同样的条件聚集的戈登·利诺夫的回答,只是扩大为所有的问题列:

select 
    t.[U_GarmentSKU] 
    , t.[U_Garment_Title] 
    , [SB] = sum(case when t.[U_GarmentSize] in ('47900')   then t.[OnHand] else 0 end) 
    , [MB] = sum(case when t.[U_GarmentSize] in ('39600')   then t.[OnHand] else 0 end) 
    , [LB] = sum(case when t.[U_GarmentSize] in ('38500')   then t.[OnHand] else 0 end) 
    , [YTH] = sum(case when t.[U_GarmentSize] in ('50100')   then t.[OnHand] else 0 end) 
    , [S] = sum(case when t.[U_GarmentSize] in ('47700')   then t.[OnHand] else 0 end) 
    , [M] = sum(case when t.[U_GarmentSize] in ('39400')   then t.[OnHand] else 0 end) 
    , [L] = sum(case when t.[U_GarmentSize] in ('38300')   then t.[OnHand] else 0 end) 
    , [XL] = sum(case when t.[U_GarmentSize] in ('49200','48700') then t.[OnHand] else 0 end) 
    , [XXL] = sum(case when t.[U_GarmentSize] in ('49700','49300') then t.[OnHand] else 0 end) 
    , [XXXL] = sum(case when t.[U_GarmentSize] in ('49800')   then t.[OnHand] else 0 end) 
from oitm t 
where t.[U_GarmentSKU] like 'SUR%' 
    and t.[U_StkStat] = 'G' 
group by t.[U_GarmentSKU], t.[U_Garment_Title] 
+0

非常感谢你们!两个很好的答案,都做到了我所需要的。 – user3232977