SQL ServerでAccessのFirst関数的なことをしたい
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 | え |