質問: 列に沿った等しい行値を見つけるTsqlクエリ 私はこのテーブルを持っている ``` col 1 col 2 col 3 .... col N ------------------------------------- 1 A B fooa 10 A foo cc 4 A B fooa ``` tsqlクエリで値が1つの行のみを返すことは可能ですが、値はすべて同じですか? ``` col 1 col 2 col 3 .... col N ------------------------------------- -- A -- -- ```
回答: ``` SELECT CASE WHEN COUNT(col1) = COUNT(*) AND MIN(col1) = MAX(col1) THEN MIN(col1) END AS col1, CASE WHEN COUNT(col2) = COUNT(*) AND MIN(col2) = MAX(col2) THEN MIN(col2) END AS col2, ... FROM yourtable ``` 列にNULLを許可する必要があります。 * COUNT(*)はそれをカウントします * COUNT(col1)はカウントされません つまり、AsとNULLを混在させた列は1つの値ではありません。 MINとMAXはどちらもNULLを無視するためAを与えます。 編集: * DISTINCTを削除して、NULLチェックでカウントを同じにする * 一意性をチェックするためにMIN/MAXチェックを追加しました(Mark Byersの削除された回答ごと)