我希望下面有足够的信息供您协助
TABA
ComapanyID TrimFields
1111 | 3
2222 | 1
3333 | 2
4444 | 4
5555 | 2
6666 | 3
TABB
SampleID | TestID | Microcomments | ProductID | ComapanyID
111101 | Test1 |满意| ABC123 | 1111
111101 | Test2 |无测试| ABC123 | 1111
111101 | Test3 |不满意| ABC123 | 1111
222202 | Test2 |满意| A21 | 2222
222202 | Test3 |不满意| A21 | 2222
333301 | Test1 |满意| AB11 | 3333
333301 | Test3 |无测试| AB11 | 3333
444403 | Test2 |不满意| ABCD123 | 4444
444403 | Test3 |无测试| ABCD123 | 4444
555504 | Test1 |不满意| BA123 | 5555
555504 | Test2 |不满意| BA123 | 5555
666601 | Test3 |满意| BBB21 | 6666
666601 | Test2 |满意| BBB21 | 6666
目前我的查询是: 声明@num int
设置@companyID = @CompanyID
选择@num = isnull(trimfields,0) 来自TABA,其中companyid = @companyID
选择不同的TABB.SampleID,TABB.MicroComments,
LTRIM(右(TABB.ProductID,len(rtrim(TABB.productID)) - @num))作为ProductID,
其中TABB.CompanyID = @CompanyID
因此,当我为每个CompanyID(WHERE CLAUSE)运行此查询时,我得到以下结果
SampleID Microcomments ProductID
111101满意123
111101 NoTest 123
111101不满意123
222202满意21
222202不满意21
333301满意11
333301 NoTest 11
444403不满意123
444403 NoTest 123
555504不满意123
555504不满意123
666601满意21
666601满意21
我需要输出以便用下面的逻辑进行总结;
逻辑1-如果样本id相同但是Microcomment具有Satis&不羁& NoTest(EG。公司ID 1111) 然后只显示' Unsatifactory'
逻辑2-如果样本id相同但是Microcomment具有Satis& Unsati(EG.CompanyID 2222) 然后只显示' Unsatifactory'
逻辑3-样本id是相同的但是Microcomment有Satis& NoTest(EG.CompanyID 3333) 然后只显示'满意'
逻辑4-样本id是相同的但是Microcomment有Unsat& NoTest(EG.CompanyID 4444) 然后只显示' Unsatisfactory'
逻辑5-样本id是相同的但是Microcomment只是Unsat(EG.CompanyID 5555) 然后只显示' Unsatisfactory'
逻辑5-样本id是相同的但是Microcomment只是Satis(EG.CompanyID 6666) 然后只显示'不满意'然后只显示'满意'
这样输出就可以了;
SampleID Microcomments ProductID
111101不满意123
222202不满意21
333301满意11
444403不满意123
555504不满意123
666601满意21
我已经尝试过case case,group by,Joins,MIN / MAX ......只是没有运气
答案 0 :(得分:0)
好的,你添加到你的问题中的额外信息我再试一次:
SELECT DISTINCT TA1.ID, TA1.Name, TA1.Location, TB1.ID, TB1.Results
FROM TableA TA1
LEFT OUTER JOIN TableB TB1
ON TB1.ID = TA1.ID
WHERE NOT EXISTS (
SELECT *
FROM TableB TB2
WHERE TB2.ID = TA1.ID
AND TB2.Results = 'UNSATISFACTORY')
OR TB1.Results = 'UNSATISFACTORY';
这应该符合您在问题中陈述的要求。它从TableA
和TableB
中选择已加入的信息,使用DISTINCT
删除双重项目,以便多个满意或未测试的项目只获得一个结果记录,并过滤掉其他项目以防万一是特定Id的TableB
中的UNSATISFACTORY记录。
您还可以在这里查看: http://sqlfiddle.com/#!9/4b202/6
原始答案
我试着根据一些假设来回答你的问题。一个是您的表结构与查询输出相同。另一个是表和列名称。
你可以试试这样的事情
SELECT DISTINCT name, location, yesorno
FROM TestTable T1
WHERE NOT EXISTS (
SELECT *
FROM TestTable T2
WHERE T2.name = T1.name
AND T2.location = T1.location
AND T2.yesorno = 'No')
OR T1.yesorno = 'No';
只有在您的数据中有可能为同一DISTINCT
,name
和location
提供多条记录时才需要yesorno
。