SQL Server 2016を使用していますが、使用しているデータは次の形式です。
CREATE TABLE #tab (cat CHAR(1), t CHAR(2), val1 INT, val2 CHAR(1));
INSERT INTO #tab VALUES
('A','Q1',2,NULL),('A','Q2',NULL,'P'),('A','Q3',1,NULL),('A','Q3',NULL,NULL),
('B','Q1',5,NULL),('B','Q2',NULL,'P'),('B','Q3',NULL,'C'),('B','Q3',10,NULL);
SELECT *
FROM #tab;
列の最後のnull以外の値を取得し、val1
でval2
グループ化cat
および順序付けしたいのt
ですが。私が求めている結果は
cat val1 val2 A 1 P B 10 C
私が来た最も近いものは、順序付けられた最後の非null値が必要なので、機能しないものLAST_VALUE
を無視しながら使用してORDER BY
います。
SELECT DISTINCT
cat,
LAST_VALUE(val1) OVER(PARTITION BY cat ORDER BY (SELECT NULL) ) AS val1,
LAST_VALUE(val2) OVER(PARTITION BY cat ORDER BY (SELECT NULL) ) AS val2
FROM #tab
cat val1 val2 A NULL NULL B 10 NULL
実際のテーブルにはcat
、最後のnull以外の値を選択するための(日付列と文字列列)の列が多く、val列(日付列、文字列列、数値列)があります。
この選択を行う方法のアイデア。
@ypercubeᵀᴹいいえ、Q4値の欠落はありません
—
エドモンド
t
。値が繰り返されます。正常に動作しないデータです。
その場合は問題ありませんが、完全な順序を決定する順序を指定する必要があります。
—
ypercubeᵀᴹ
PARTITION BY cat ORDER BY t, id
例えば。そうしないと、同じクエリ(どのクエリでも)を実行すると、結果が異なる場合があります。テーブルの列が表示するものだけである場合、どのように確定的な順序を設定できるかわかりません!
@ypercubeᵀᴹそこに課題があります。データにid列がありません。複数のグループ化列があり、グループ内での順序付けに使用できる文字列列があり、次にnullが散在する複数の値列があります。
—
エドモンド
SQL Serverに行の順序を決定的に指示できない場合、このデータのコンシューマーはどのように違いを知るのでしょうか。
—
アーロンバートランド
cat
れていt
ます。