タイトルが適切かどうかはわかりませんが、どのように単語を書くのかが少し分かりませんでした。私はcircumstances
のテーブルを持っており、渡されたデータを与えられたcircumstances
のグループに基づいて特定の質問を表示する必要があります。SQL Server - グループ内でNULLを含む結果を削除する
私の本のように見えるデータで渡す:私は、質問IDを保持するテーブルを、その後持って
--------------------------------------------------
| ID | CircumstanceType | GroupID | Value |
--------------------------------------------------
| 1 | Equipment | 1 | Reefer |
--------------------------------------------------
| 2 | Customer | 1 | BEEFOR |
--------------------------------------------------
:私CircumstanceMaster
表は次のようになります
----------------------------------------------------
| CircumstanceTypeGiven | CircumstanceValueGiven |
----------------------------------------------------
| Equipment | X |
----------------------------------------------------
| Customer | BEEFORE |
----------------------------------------------------
グループはそうです:
--------------------------------------------------
| ID | CircumstanceGroupID | QuestionID |
--------------------------------------------------
| 1 | 1 | 1 |
--------------------------------------------------
私の質問表:
--------------------------------------------------
| ID | Question |
--------------------------------------------------
| 1 | This is my question for Reefer & BEEFOR |
--------------------------------------------------
だから、私はXの機器の種類とBEEFORの顧客価値を渡さ取得しています。私の状況テーブルには、私は、シナリオ(1つだけが渡された場合しかし、私は質問をしたくない、私は冷蔵とBEEFOREを通過していた場合、その後、私はgroupID
1の質問を取得する必要があると述べています贈り物)。ここで
はSQLです:
CREATE TABLE CircumstanceMaster
(
CircumstanceID INT NOT NULL PRIMARY KEY IDENTITY(1,1),
CircumstanceGroupID INT NOT NULL,
CircumstanceType INT NOT NULL,
CircumstanceValue VARCHAR(MAX) NOT NULL
)
INSERT INTO CircumstanceMaster (CircumstanceType, CircumstanceGroupID, CircumstanceValue) VALUES (1, 1, 'R')
INSERT INTO CircumstanceMaster (CircumstanceType, CircumstanceGroupID, CircumstanceValue) VALUES (2, 1, 'DEEFOR')
CREATE TABLE QuestionMaster
(
QuestionID INT NOT NULL PRIMARY KEY IDENTITY(1,1),
Question VARCHAR(MAX) NOT NULL
)
INSERT INTO QuestionMaster (Question) VALUES ('Reefer & DEEFOR question')
CREATE TABLE CircumstanceQuestion
(
ID INT NOT NULL PRIMARY KEY IDENTITY(1,1),
CircumstanceGroupID INT NOT NULL,
QuestionID INT NOT NULL
)
INSERT INTO CircumstanceQuestion (CircumstanceGroupID, QuestionID ) VALUES (1, 1)
declare @given Table(CircumstanceTypeGivenID INT, CircumstanceValueGiven varchar(50))
insert into @given(CircumstanceTypeGivenID,CircumstanceValueGiven) VALUES (1, 'X')
insert into @given(CircumstanceTypeGivenID,CircumstanceValueGiven) VALUES (2, 'DEEFOR')
select *
from CircumstanceMaster cm
left outer join @given g on cm.CircumstanceType=g.CircumstanceTypeGivenID and cm.CircumstanceValue=g.CircumstanceValueGiven
私はcircumstancemaster
テーブルまで参加したときに、私はこの結果を取得しています。私は、結果を期待するが、私は「同じグループ内の行のいずれかがNULL値を持っている場合は、何も返さない」と言う方法が必要です:
select CircumstanceGroupID
from CircumstanceMaster cm
left join @given g on cm.CircumstanceType=g.CircumstanceTypeGivenID and cm.CircumstanceValue=g.CircumstanceValueGiven
group by CircumstanceGroupID
having sum(case when CircumstanceValueGiven is null then 0 else 1 end) = count(*)
:
----------------------------------------------------------------
| CircumstanceID | CircumstanceGroupID | CircumstanceValueGiven|
----------------------------------------------------------------
| 1 | 1 | NULL |
----------------------------------------------------------------
| 2 | 1 | BEEFOR |
----------------------------------------------------------------
すべての行に1つのヌル値があってもすべての結果が表示されない場合はどういう意味ですか?または行がnull値を持たないことを表示するだけです –