の開始日から終了日を導出する(私はそれを少し単純化)どのように私はこの「美しい」のクエリを持っている他のSQLライン
(申し訳ありませんが、私はできない私のような結果を与えるselect B.IQID, B.NAME, A.IQID, A.START_DATE, NULL as A.END_DATE, CODE, VALUE
from TABLE A
join OTHERTABLE B on A.PORTFOLIO = B.IQID
cross apply (
values
('TRANSOP', A.METANUM1),
('CROIS', A.METANUM2),
('QUALMAT', A.METANUM3)
) as c (CODE, VALUE)
order by 1,6,4 desc
テーブルを作成していると思われます)。
B.IQID | B.NAME | A.IQID | START_DATE | END_DATE | CODE | VALUE
1 eResearch A 2017-08-31 NULL CROIS 0,0001
1 eResearch B 2017-06-30 NULL CROIS 32,2
1 eResearch C 2017-03-31 NULL CROIS 0
1 eResearch D 2015-12-31 NULL CROIS 70
1 eResearch E 2017-03-31 NULL QUALMAT 100
1 eResearch F 2015-12-31 NULL QUALMAT 20
1 eResearch G 2017-03-31 NULL TRANSOP 0
1 eResearch H 2015-12-31 NULL TRANSOP 10
2 Technology I 2015-12-31 NULL CROIS 70
2 Technology J 2017-08-31 NULL QUALMAT 0
2 Technology K 2015-12-31 NULL TRANSOP 10
ここでわかるように、END_DATEという名前の列は追加されていますが、空です。 この表で必要なレポート作成のために、end_dateに値を設定する必要があります。
このend_dateは、「次の」行の開始日から1日を引いたものとします。 しかし、 "次の"行は、実際に同じB.IQIDと同じCODEの最新の行であり、END_DATEが適用されない場合はNULLを残しています。
私はこの結果を取得したいと思う明確にする:それはMSSQLに可能と思われる何か
B.IQID | B.NAME | A.IQID | START_DATE | END_DATE | CODE | VALUE
1 eResearch A 2017-08-31 NULL CROIS 0,0001
1 eResearch B 2017-06-30 2017-08-30 CROIS 32,2
1 eResearch C 2017-03-31 2017-06-29 CROIS 0
1 eResearch D 2015-12-31 2017-03-30 CROIS 70
1 eResearch E 2017-03-31 NULL QUALMAT 100
1 eResearch F 2015-12-31 2017-03-30 QUALMAT 20
1 eResearch G 2017-03-31 NULL TRANSOP 0
1 eResearch H 2015-12-31 2017-03-30 TRANSOP 10
2 Technology I 2015-12-31 NULL CROIS 70
2 Technology J 2017-08-31 NULL QUALMAT 0
2 Technology K 2015-12-31 NULL TRANSOP 10
ですか? ありがとうございます!
ここに情報を追加するだけです。例のために、IQIDは1、2、...またはA、B、C ...を使用しましたが、実際にはこれらは35個のランダムなキャラクターの英数字チャンクです9368C1BFEB4D424C9ADBF7CD007274D0 – NessaC