このようなものが多分あります。
これは、名前列が一意のである場合にのみ機能します。そうでない場合は、IDを追加することができます。
だから、最初のいくつかのテストデータ:
CREATE TABLE tblValues
(
ID INT,
Name VARCHAR(100),
ValueID INT,
Value VARCHAR(100)
)
INSERT INTO tblValues
VALUES
(100,'Color',10000,'Black'),
(101,'Size',10005,'Large')
次にあなたが旋回するように列を取得する必要があります:
DECLARE @query NVARCHAR(4000)=
N'SELECT
*
FROM
(
SELECT
''Name_''+CAST(tbl.ID AS VARCHAR(100)) AS pivotName,
CAST(tbl.ValueID AS VARCHAR(100)) AS name
FROM
tblValues AS tbl
UNION ALL
SELECT
tbl.Name AS pivotName,
tbl.Value AS name
FROM
tblValues AS tbl
) AS p
PIVOT
(
MAX(name)
FOR pivotName IN ('[email protected]+')
) AS pvt'
EXECUTE(@query)
:
DECLARE @cols VARCHAR(MAX)
;WITH CTE AS
(
SELECT
'Name_'+CAST(tbl.ID AS VARCHAR(100)) AS Name,
'Name_'+CAST(tbl.ID AS VARCHAR(100)) AS Sort,
tbl.ID
FROM
tblValues AS tbl
UNION ALL
SELECT
tbl.Name,
'Value_'+CAST(tbl.ID AS VARCHAR(100)) AS Sort,
tbl.ID
FROM
tblValues AS tbl
)
SELECT
@cols = COALESCE(@cols + ','+QUOTENAME(Name),
QUOTENAME(Name))
FROM
CTE
ORDER BY
CTE.ID,
CTE.Sort
次に、このような動的SQLを宣言し、実行します
私の場合、私が作成したテーブルを落とす
DROP TABLE tblValues
編集
それとも、それはこのようなものでなければなりません場合は:
まず列:次に
DECLARE @cols VARCHAR(MAX)
;WITH CTE AS
(
SELECT
'Name_'+CAST(tbl.ID AS VARCHAR(100)) AS Name,
'Name_'+CAST(tbl.ID AS VARCHAR(100)) AS Sort,
tbl.ID
FROM
[Table] AS tbl
WHERE
tbl.OptionID = 1000000
UNION ALL
SELECT
tbl.Name,
'Value_'+CAST(tbl.ID AS VARCHAR(100)) AS Sort,
tbl.ID
FROM
[Table] AS tbl
WHERE
tbl.OptionID = 1000000
)
SELECT
@cols = COALESCE(@cols + ','+QUOTENAME(Name),
QUOTENAME(Name))
FROM
CTE
ORDER BY
CTE.ID,
CTE.Sort
動的SQL。
DECLARE @query NVARCHAR(4000)=
N'SELECT
*
FROM
(
SELECT
''Name_''+CAST(tbl.ID AS VARCHAR(100)) AS pivotName,
CAST(tbl.ValueID AS VARCHAR(100)) AS name
FROM
[Table] AS tbl
WHERE
tbl.OptionID = 1000000
UNION ALL
SELECT
tbl.Name AS pivotName,
tbl.Value AS name
FROM
[Table] AS tbl
WHERE
tbl.OptionID = 1000000
) AS p
PIVOT
(
MAX(name)
FOR pivotName IN ('[email protected]+')
) AS pvt'
EXECUTE(@query)
テーブルを作成するか、テーブルを削除する必要はありません。それは、私のデータベースにあなたのテーブルがなく、他の誰かがその例を実行したいと思っているからです。
テーブル、サンプルデータ、および希望の結果を表示できますか? 「うまくいかない」とはどういう意味ですか? –
@Aaron: 'Table'は4列のX個の行結果のリストです。クエリ全体が機能しません。ピボットもこれを処理できますか? –
私は分かりません。だから私はあなたが達成しようとしていることの詳細を尋ねました。テーブル構造( 'CREATE TABLE')、サンプルデータ、そしてクエリの出力をどのように見せたいでしょうか?それ以外の場合は、ピボットが処理すると予想される「これ」が何であるかわかりません。 –