2012-02-01 82 views
2

我有這樣的選擇如下:SQL查詢的分組

SELECT SUBSTRING(Col1, 1, 3)   AS 'Series', 
     b.Col2, 
     CAST(c.Price * c.Qty AS MONEY) AS Total 
FROM tableName a 
inner join .... 
... 
WHERE DATE BETWEEN '1/1/2012' AND '1/31/2012' 
     AND B IN ('C50', 'C51', 'C52', 'C53', 'C54') 
GROUP BY Col1, 
      b.Col2, 
      c.Price, 
      c.Qty 

它返回這個結果集:

Series  Col2  Total 
---------- ---------- ---------- 
105   C50   5.00 
105   C50   15.00 
105   C53   20.00 
105   C53   20.00 
105   C53   20.00 

這是我想它是如何工作的:

Series  C50   C53 
---------- ---------- ---------- 
105   20.00  60.00 

不知道如何做內部選擇以獲得該結果。有任何想法嗎?

+1

您需要旋轉。 – 2012-02-01 22:47:45

+0

看看這個鏈接,它可能會有所幫助。 http://technet.microsoft.com/en-us/library/ms177410.aspx – Dan 2012-02-01 22:55:23

回答

1

請試試以下代碼。你必須使用PIVOT查詢。

create table TableName (Series varchar(20),col2 varchar(10), price decimal(8,2)) 

insert into TableName values ('105','C50',30) 
insert into TableName values ('105','C50',10) 

insert into TableName values ('105','C53',20) 
insert into TableName values ('105','C53',30) 


SELECT Series, 
     [C50], 
     [C53] 
FROM (SELECT Series, 
       col2, 
       price 
     FROM TableName) AS SourceTable 
        PIVOT (SUM(price) FOR col2 IN ([C50], 
                [C53]) 
     ) AS PivotTable; 
+0

@馬丁史密斯 - 非常好,謝謝!我將如何獲得任何潛在空值的列? IE瀏覽器。 Col2具有空值,但它們具有與它們相關聯的總計。 – hype 2012-02-02 16:18:02

+0

我提供了你問的問題[col2的潛在空值] – 2012-02-03 09:35:22

0

對於col2的潛在空值,請嘗試下面的代碼。

注意:您可能需要調整@PIV_COL大小,具體取決於col2的不同記錄數。我使用'NO_VAL'作爲col2的潛在NULL值。

insert into TableName values ('105',NULL,100) 


DECLARE @PIV_COL VARCHAR(100) 

SELECT @PIV_COL = STUFF(
(
    SELECT DISTINCT ',[' + ISNULL(COL2,'NO_VAL') + ']' 
    FROM TableName C 
    FOR XML PATH('') 
), 1, 1, '') 


EXEC 
(' 
    SELECT Series,' + @PIV_COL + ' 
    FROM (
       SELECT Series, 
        ISNULL(COL2,''NO_VAL'') col2, 
        price 
      FROM TableName) AS SourceTable 
         PIVOT (SUM(price) FOR col2 IN ('+ @PIV_COL + ') 
    ) AS PivotTable 
')