2
入手可能なデータに基づいて、クロス集計レポートを取得 - ピボット
私は(クロス集計)に旋回し、電源を入れ、既存のテーブルをし、レポートを生成します。 vals列は、date_a列とdate_e列の一意の組み合わせによって決まります。私はこれをする方法を知らない。このような
入手可能なデータに基づいて、クロス集計レポートを取得 - ピボット
私は(クロス集計)に旋回し、電源を入れ、既存のテーブルをし、レポートを生成します。 vals列は、date_a列とdate_e列の一意の組み合わせによって決まります。私はこれをする方法を知らない。このような
何か:
テストデータ
CREATE TABLE #tbl(date_a DATE,date_e DATE, vals FLOAT)
INSERT INTO #tbl
VALUES
('2/29/2012','1/1/2013',28.47),
('2/29/2012','2/1/2013',27.42),
('2/29/2012','3/1/2013',24.36),
('3/1/2012','1/1/2013',28.5),
('3/1/2012','2/1/2013',27.35),
('3/1/2012','3/1/2013',24.39),
('3/6/2012','1/1/2013',27.75),
('3/6/2012','2/1/2013',26.63),
('3/6/2012','3/1/2013',23.66)
クエリ
SELECT
*
FROM
(
SELECT
tbl.date_a,
tbl.date_e,
vals
FROM
#tbl AS tbl
) AS SourceTable
PIVOT
(
SUM(vals)
FOR date_e IN ([1/1/2013],[2/1/2013],[3/1/2013])
) AS pvt
DROP TABLE #tbl
EDIT
いくつの列があるか分からない場合は、動的な操作を行う必要がありますpivot
。このように:
ユニーク列
DECLARE @cols VARCHAR(MAX)
;WITH CTE
AS
(
SELECT
ROW_NUMBER() OVER(PARTITION BY date_e ORDER BY date_e) AS RowNbr,
tbl.*
FROM
#tbl AS tbl
)
SELECT @cols=STUFF
(
(
SELECT
',' +QUOTENAME(date_e)
FROM
CTE
WHERE
CTE.RowNbr=1
FOR XML PATH('')
)
,1,1,'')
ダイナミックピボット感謝の
DECLARE @query NVARCHAR(4000)=
N'SELECT
*
FROM
(
SELECT
tbl.date_a,
tbl.date_e,
vals
FROM
#tbl AS tbl
) AS SourceTable
PIVOT
(
SUM(vals)
FOR date_e IN ('[email protected]+')
) AS pvt'
EXECUTE(@query)
負荷、それは欠陥なしで働いていました。クロックが2分の障壁に達するとそれを受け入れるでしょう:) –
問題はありません。嬉しいことです:P ..私はあなたのためのボーナスの例を追加しました:P ..見てください。 – Arion
thatsちょうど素晴らしい! cudntもっと尋ねます.. :)たくさんのおかげです。 –