読者です 読者をやめる 読者になる 読者になる

φ(..) ビボ~6 φ(..)

主にAccess、VBAに関する備忘録

SQL ServerでAccessのFirst関数的なことをしたい

SQL Server

ACCESSの↓こんな感じのことをSQL Serverでも実現したい。

SELECT FLD1, First(TABLE_A.FLD2) AS FLD2, First(TABLE_A.FLD3) AS FLD3
FROM TABLE_A
WHERE FLD3 IS NOT NULL
GROUP BY FLD1

SQL Server:

基本レコード
FLD1 FLD2 FLD3
1 1 NULL
1 2
1 3
2 1
2 2 NULL
2 3
グループ毎に連番付けしてみるテスト

SELECT FLD1, FLD2, FLD3, FLD_A
FROM
(
SELECT FLD1, FLD2, ROW_NUMBER() OVER(PARTITION BY FLD1 ORDER BY FLD2) AS FLD_A
FROM TABLE_A
WHERE FLD3 IS NOT NULL
) AS QRY_A

→ 結果
FLD1 FLD2 FLD3 FLD_A
1 1 NULL 1
1 2 2
1 3 3
2 1 1
2 2 NULL 2
2 3 3
グループ毎の先頭(最後)だけ取り出してみるテスト

SELECT FLD1, FLD2, FLD3, FLD_A
FROM
(
SELECT FLD1, FLD2, ROW_NUMBER() OVER(PARTITION BY FLD1 ORDER BY FLD2) AS FLD_A
FROM TABLE_A
WHERE FLD3 IS NOT NULL
) AS QRY_A
WHERE FLD_A = 1

→ 結果 (ASC)
FLD1 FLD2 FLD3
1 2
2 1
→ 結果 (DESC)
FLD1 FLD2 FLD3
1 3
2 3