sql - 重複 - この列は集計関数または group by 句に含まれていません。




グループ化に基づいた列を返すSQLクエリ (2)

私はこれを次のように選択します:

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   

その結果を得るために内部の選択を行う方法がわからない。 何か案は?


次のコードを試してください。 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;  

col2の潜在的なNULL値については、次のコードを試してください。

注意:@PIV_COLサイズは、col2のレコード数に応じて調整する必要があります。 col2の潜在的なNULL値として 'NO_VAL'を使用しました。

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
')




sql-server-2005