0

私はT-sqlを使用しています。SQL について助けが必要です。私は IN ステートメントを使用しています。例として 1,32,21 を探します。一部のレコードには 2 つの数字しかありません。リストにある場合は「YES」、「NO」を返すことができます。そうでない場合は代わりに、「はい」の場合は数を数えます。

アップデート!!

id  firstName   uid   value name                     amount typeofthing
161 sture       10470   1   Engineer Officer Class 1    1   certificate
444 kumba       10472   1   Engineer Officer Class 1    3   certificate

これが私のデータです!ご覧のとおり、 UID 10470 を持つユーザー
は 1 つの証明書しか保持していません。私が達成したいのは、このようにデータに新しい行を追加することです

id  firstName   uid   value name                     amount typeofthing HasorNot
161 sture       10470   1   Engineer Officer Class 1    1   certificate YES
161 sture       10470   32  Engineer Officer Class 2    1   certificate NO 
161 sture       10470   21  Engineer Officer Class 3    1   certificate NO

そして、その量は、各タイプの YES:es の量にカウントされます。彼らが持っていないコース/証明書の名前を取得したいですか?私が使用するSQLは以下です。ありがとう

select  
   tuc.id, tu.firstName, tuc.uid, tuc.value, tc.name, 
   count(tuc.value) over (PARTITION BY tuc.uid) as 'amount', 'certificate' as 'typeofthing' 
from 
   t_user_certificates tuc, t_certificates tc, t_users tu 
where 
   tuc.[value] IN (1,32,21)
   AND tuc.value = tc.id
   AND tu.id = tuc.uid

union 

select 
   tuc.id, tu.firstName, tuc.uid, tuc.value, tc.name, 
   count(tuc.value) over (PARTITION BY tuc.uid) as 'amount', 
   'courses' as 'typeofthing' 
from 
   t_user_courses tuc, t_courses tc, t_users tu 
where 
   tuc.[value] IN(2,16,21) 
   AND tuc.value = tc.id
   AND tu.id = tuc.uid
4

1 に答える 1

0

CASE WHEN count(tuc.value) = 0 THEN 'YES' ELSE 'NO' END私があなたを正しく読んでいるなら、選択リストに次のようなものがあるようです

または、データの更新を確認した後。これでうまくいくと思います:

ステップ 1 では、tu テーブルと tuc テーブルの間で外部結合を使用します。@marc_s のコメントを参照してください。
ステップ 2 は、出力の「id」列を取り除くか、null にすることです。ユーザーが特定の証明書を持っていない場合、tuc には行がないように見えるため、この列はすべての行に対して意味を持ちません。
ステップ3は列を追加することです CASE WHEN tuc.value IS NULL THEN 'NO' ELSE 'YES' END AS 'HasOrNot'

于 2013-03-17T23:57:15.343 に答える