2016-06-24 2 views
0

行を列に転置する必要がありますが、テーブルの行数はわかりません。この例は、静的な行数に対して機能します。私はこのサイトでいくつかの動的なSQLの例を見つけましたが、どのように動作しているか分かりません。列の昇順に列を転記する

SELECT [9 payments], [Delay Tax return], [New Payment Schedule] 
 
FROM 
 
(SELECT RehabMetric, Reviews.ReviewID 
 
FROM RehabMetricsCalls INNER JOIN 
 
    RehabMetrics ON RehabMetricsCalls.RehabMetricID = RehabMetrics.RehabMetricID INNER JOIN 
 
    Reviews ON RehabMetricsCalls.ReviewID = Reviews.ReviewID) AS pivTemp 
 
PIVOT 
 
( COUNT(ReviewID) 
 
    FOR RehabMetric IN ([9 payments], [Delay Tax return], [New Payment Schedule]) 
 
) AS pivTable 
 

 
Table names: 
 

 
*RehabMetrics* 
 
RehabMetricID 
 
RehabMetric 
 

 
(Sample Data) 
 
2, Nine Payments 
 
7,Delay Tax Return 
 
12, Continue Payments 
 

 
*RehabMetricsCalls* 
 
RehabMetricID 
 
ReviewID 
 

 
*Reviews* 
 
ReviewID

答えて

0

私はその後、正しくあなたの質問を理解していれば、あなたは、動的なもので、あなたのクエリ

[9 payments], [Delay Tax return], [Delay Tax return] 

のこの部分を交換する必要があります。

のは、あなたの場合の結果はだから今のは、あなたの質問

にお答えしてみましょう

name 
--------------------- 
[9 payments] 
[Delay Tax return] 
[Delay Tax return] 

ある

select name from some_table_with_your_column_names 

例えばとしてあなたカラム名を返すクエリがあると仮定しましょう

declare @columns nvarchar(max) = ''; 

select @columns = concat(@columns, iif(@columns <> '', '], ', ''), '[', name) 
from some_table_with_your_column_names 
where name is not null 
and name <> ''; 

if @columns <> '' begin 
    select @columns = concat(@columns, ']'); 

    declare @query nvarchar(max) = N'select ' + @columns + ' from (select RehabMetric, Reviews.ReviewID from RehabMetricsCalls inner join RehabMetrics ON RehabMetricsCalls.RehabMetricID = RehabMetrics.RehabMetricID inner join Reviews ON RehabMetricsCalls.ReviewID = Reviews.ReviewID) AS pivTemp pivot( count(ReviewID) for RehabMetric in (' + @columns + ')) AS pivTable'; 

    execute sp_executesql @query; 
end else begin 
    -- do something else here if your column list is empty 
end 
関連する問題