0

以下のようなデータがあります。

テーブル


country     date                value       
------------------------------------------------------
test1       5/1/2008            500
test1       5/7/2008            200 
test1       5/8/2008            300
test1       7/1/2008            100
test1       7/2/2008            100
test2       6/1/2008            100

そして、私は以下のような結果が欲しい:

 Result
-----------
countryName          May-08         Jun-08      July-08
test1                1000             -          200
test2                 -              100 
4

2 に答える 2

1

これはT-SQL Pivot から採用されていますか? 行の値から表の列を作成する可能性

ここで動作することがわかります: http://sqlfiddle.com/#!3/7b8c0/28

列の順序をいじる必要があるかもしれないと思います

-- Static PIVOT
SELECT *
FROM (SELECT country,
      CONVERT(char(3), date, 0) + '-' +  
      RIGHT(CONVERT(varchar, YEAR(date)), 2) AS date,
      value
FROM country) AS D
PIVOT(SUM(value) FOR date IN([May-08],[Jun-08],[Jul-08])) AS P;
GO

-- Dynamic PIVOT
DECLARE @T AS TABLE(y INT NOT NULL PRIMARY KEY);

DECLARE 
@cols AS NVARCHAR(MAX),
@y    AS INT,
@sql  AS NVARCHAR(MAX)

SELECT @cols = STUFF(
(SELECT N',' + QUOTENAME(y) AS [text()]
FROM (SELECT DISTINCT CONVERT(char(3), date, 0) + '-' +  
      RIGHT(CONVERT(varchar, YEAR(date)), 2) AS y 
      FROM Country
     ) AS Y
ORDER BY y desc
FOR XML PATH('')),
1, 1, N'')

-- Construct the full T-SQL statement
-- and execute dynamically
SET @sql = N'SELECT *
FROM (SELECT country, CONVERT(char(3), date, 0) + ''-'' +  
      RIGHT(CONVERT(varchar, YEAR(date)), 2) AS date, value
FROM Country) AS D
PIVOT(SUM(value) FOR date IN(' + @cols + N')) AS P;'

EXEC sp_executesql @sql
于 2013-02-26T12:02:44.100 に答える
0

LOOPit thinkを使用して、かなり複雑なクエリを使用する必要があります。

動的な列名を作成するには、この投稿を参照してください: https://stackoverflow.com/a/10926106/1321564

SQLサーバーを使用すると、いくつかの利点があります:https://stackoverflow.com/a/5638042/1321564

于 2013-02-26T11:27:13.017 に答える