2016-08-15 4 views
-1

私は4つの列があり、列が定期的に追加または削除される可能性があるという表があります。実行時に列を処理し、計算を実行する動的なクエリが必要です。動的列col1 col2 col3 col4

以下は私のテーブルの構造とレコードのサンプルです。

ID, col1,   col2,   col3,    col4 
1 '2016-08-09'  '2016-08-09' '2016-08-09'  '2016-08-09' 
2 '2016-08-10'  '2016-08-10' '2016-08-13'  '2016-08-04' 

私は私の日付の差は、各列に来るべきで、1つの合計の列は、特定のIDのために、これらの列の合計数を与えているが追加すべきべきになりたいです。結果セットは以下のようになります。

ID col1 Col2 Col3 Col4 Total 
1 6  6  6 6  24 
2. 6  7  8 8  29 
+0

どのように予想されること、サンプルデータからの出力を得るのですか...? – ZLK

+0

日付差計算を説明してください。 –

+0

あなたの日付IDの差分はdatediff(dd、coln、getdate())のように見えますが、ID 2は同じパターンに従いません –

答えて

1

テスト済みです。 :)

--create table structure 
create table #test1 (ID int, col1 date, col2 date, col3 date, col4 date) 
go 

--insert sample data 
insert #test1 
select 1, '2016-08-09',  '2016-08-09', '2016-08-09',  '2016-08-09' 
union all 
select 2, '2016-08-10',  '2016-08-10', '2016-08-13',  '2016-08-04' 
union all 
select 3, '2016-08-10',  '2016-08-10', NULL,  '2016-08-04' 


--below is solution 
with cte_test1 (id, dif1, dif2, dif3, dif4) as 
(
    select id, 
      datediff(day, col1, getdate()) as dif1, 
      datediff(day, col2, getdate()) as dif2, 
      datediff(day, col3, getdate()) as dif3, 
      datediff(day, col4, getdate()) as dif4 
    from #test1 
) 
select id,dif1,dif2,dif3,dif4,ISNULL(dif1,0)+ISNULL(dif2,0)+ISNULL(dif3,0)+ISNULL(dif4,0) as difTotal 
from cte_test1 

結果:

enter image description here

+0

OPが動的を探していました –

+0

ありがとうございました。率直に言えば、ここでは「列の削除と追加」が何を意味するのか分かりません。私は列を削除することによって、OPはnullと設定することを意味します。 –

+0

あなたは正しいかもしれません。私の理解は列ではなく行です。それは私には彼のための解決策があると言われましたが、彼は私の質問に決して答えませんでした。上に移動...歓声 –

関連する問題