-5

次のようなレコードを持つテーブルがあります。

Particluar       | Amount
Excise Duty 12 % | 2775.00
Edu CESS 2%      | 56.00
HR Edu CESS 1%   | 28.00
Sale CST 2%      | 520.00

選択クエリから次を取得するにはどうすればよいですか?

Excise Duty 12 % | Edu CESS 2% | HR Edu CESS 1% | Sale CST 2%
2775.00          | 56.00       | 28.00          | 520.00
4

2 に答える 2

6

データを行から列にピボットするには、いくつかの方法があります。

CASE式で集計関数を使用できます。

select 
  sum(case when Particluar='Excise Duty 12 %' then amount else 0 end) [Excise Duty 12 %],
  sum(case when Particluar='Edu CESS 2%' then amount else 0 end) [Edu CESS 2%],
  sum(case when Particluar='HR Edu CESS 1%' then amount else 0 end) [HR Edu CESS 1%],
  sum(case when Particluar='Sale CST 2%' then amount else 0 end) Sale CST 2%]
from yourtable;

SQL Server 2005 以降では、PIVOT関数を使用してデータを列に変換できます。

select *
from
(
  select Particluar, Amount
  from yourtable
) d
pivot
(
  sum(amount)
  for Particluar in ([Excise Duty 12 %], [Edu CESS 2%], 
                     [HR Edu CESS 1%], [Sale CST 2%])
) piv;

値の数が不明な場合は、Particluar動的 SQL を使用して結果を取得できます。

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Particluar) 
                    from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT ' + @cols + ' 
            from 
            (
                select Particluar, Amount
                from yourtable
            ) x
            pivot 
            (
                sum(Amount)
                for Particluar in (' + @cols + ')
            ) p '

execute(@query)
于 2013-04-30T11:53:56.490 に答える
1

これを試してみてください -

SELECT pt.*
FROM dbo.table1 o
PIVOT
(
    COUNT(o.Amount)
    FOR o.Particluar IN (
          [Excise Duty 12 %]  
        , [Edu CESS 2%] 
        , [HR Edu CESS 1%]
        , [Sale CST 2%]
    )
) pt
于 2013-04-30T10:41:32.983 に答える