2017-11-30 6 views
1

特定のフィールドのデータを保持する選択クエリの動的変数を作成する必要があるシナリオが残っています。 Column0='H'値が変化するまでColumn0='D'(表が複数のHがあるときここでシナリオSQL Serverのテーブル内のフィールドをロードするための動的変数の作成方法

テーブル「お客様」のデータの下に持っている

Column0 Column1 Column2  Column3  Column4 Column5 
-------------------------------------------------------- 
H  123X    11/27/2017 C  10.23 
D  123X 78462F103 11/28/2017 A  112.35 
D  123X 55024U109 11/28/2017 A  25.30 
H  456X    11/27/2017 B  5263.44 
D  456X 78462F103 11/28/2017 A  23.00 
D  456X 55024U109 11/28/2017 A  12123.00 
D  456X 78462F103 11/28/2017 A  56.08 
D  456X 55024U109 11/28/2017 C  45.07 

今私はColumn0='H'Sum(column5)を使用するときに変数を作成し、Column5にそれをロードする必要があります値)。

例:Column0 = 'H'と言うと、 と言うことができます。Column0 = 'H'の場合、変数= Sum(Column5)は '5.36'です。 Coulmn1 = 'D'のとき、Column5の値は5.63としてロードされます。新しいColumn0 = 'H'のとき、変数の値は '6.33'に変更され、更新された値が 'D'レコードに読み込まれます。

これに関するご提案はありますか?

+0

サンプルデータを投稿していただきありがとうございます。それは役に立ちます。しかし、この新しいコラムであなたが望むものはまったく明らかではありません。あなたのサンプルを見れば、出力はどうなるでしょうか? –

+0

「まで」?どのような順序に基づいて?望ましい結果が明確になるのに役立ちます。 – JNevill

+0

Column0 = 'H'と言うと、変数を計算する必要があります Column0 = 'H'の場合、変数= Sum(Column5)は '5.36'です。 Coulmn1 = 'D'のとき、Column5の値は5.63としてロードされます。新しいColumn0 = 'H'のとき、変数の値は '6.33'に変更され、更新された値が 'D'レコードに読み込まれます。 –

答えて

0

正しいとすれば、Column0 = Hのときに、各Column1のすべての行の合計がColumn5の新しい値になります。

注意何かできるようになる前に、サンプルデータをテーブルに作成する必要がありました。

declare @Something table 
(
    Column0 char(1) 
    , Column1 char(4) 
    , Column2 varchar(20) 
    , Column3 date 
    , Column4 char(1) 
    , Column5 decimal (9,2) 
) 

insert @Something values 
('H', '123X', '', '11/27/2017', 'C', 10.23) 
, ('D', '123X', '78462F103', '11/28/2017', 'A', 112.35) 
, ('D', '123X', '55024U109', '11/28/2017', 'A', 25.30) 
, ('H', '456X', '', '11/27/2017', 'B', 5263.44) 
, ('D', '456X', '78462F103', '11/28/2017', 'A', 23.00) 
, ('D', '456X', '55024U109', '11/28/2017', 'A', 12123.00) 
, ('D', '456X', '78462F103', '11/28/2017', 'A', 56.08) 
, ('D', '456X', '55024U109', '11/28/2017', 'C', 45.07) 
; 

with SummaryData as 
(
    select * 
     , NewCol5 = case when Column0 = 'H' then sum(Column5) over(partition by Column1) else Column5 end 
    from @Something 
) 

update SummaryData 
set Column5 = NewCol5 

select * 
from @Something 

このデザインからすぐに離れることを強くお勧めします。それはエラーでいっぱいです。さらに悪いことに、これは販売情報のように見えます。このデザインでは、SalesTax、Shipping、discountsなどのようなものを追跡することはできません。注文について追跡したいすべての種類のものを追跡できます。

+0

ソースがフラットファイルであるという印象を受けました。 – KeithL

0

ソースがフラットファイルであり、SSISソリューションを提供しているという印象を受けました。

read data -> Conditional Split ("H" and "D") 

Dpath 
Multicast -> Write out detail records 
    -> Aggregate on Col1 --> Merge Join to H path 

H path: 
Merge Join on Col1 to Aggregated Data 

Finally either AddH Col5 to Aggregate or replace col 5 with aggregate (it's not clear in question.) 

Write out your header records. 
関連する問題