列に沿った等しい行値を見つける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       --              --
3

1 答え

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の削除された回答ごと)
5
追加された
+1これは良いアイデアです
追加された 著者 Mark Byers,
@MicheleVirgilio:修正済み...
追加された 著者 gbn,
編集をお読みください。
追加された 著者 ʞᴉɯ,
もう一度働いていない...
追加された 著者 ʞᴉɯ,
完璧、ありがとう!
追加された 著者 ʞᴉɯ,