SQL查询-消除过程
我有3个查询,我需要把它们放在一个单一的查询和一个单一的输出中,但似乎无法得到我需要的最终结果。如有任何建议,将不胜感激SQL查询-消除过程,sql,Sql,我有3个查询,我需要把它们放在一个单一的查询和一个单一的输出中,但似乎无法得到我需要的最终结果。如有任何建议,将不胜感激 SampleID | TestID | Microcomments |ProductID |ComapanyID ---------+--------+----------------+----------+---------- 111101 | Test1 | Satisfactory | ABC123 | 1111 111101 | Test2 |
SampleID | TestID | Microcomments |ProductID |ComapanyID
---------+--------+----------------+----------+----------
111101 | Test1 | Satisfactory | ABC123 | 1111
111101 | Test2 | No Test | ABC123 | 1111
111101 | Test3 | Unsatisfactory | ABC123 | 1111
222202 | Test2 | Satisfactory | A21 | 2222
222202 | Test3 | Unsatisfactory | A21 | 2222
333301 | Test1 | Satisfactory | AB11 | 3333
333301 | Test3 | No Test | AB11 | 3333
444403 | Test2 | Unsatisfactory | ABCD123 | 4444
444403 | Test3 | No Test | ABCD123 | 4444
555504 | Test1 | Unsatisfactory | BA123 | 5555
555504 | Test2 | Unsatisfactory | BA123 | 5555
666601 | Test3 | Satisfactory | BBB21 | 6666
666601 | Test2 | Satisfactory | BBB21 | 6666
问题1
Select distinct sample ID
where Microcomment = 'Unsatisfactory'
问题2
Select Distinct Sample ID
where Microcomment = 'Satisfactory'
and (only display sampleID’s that don't appear in the Query 1)
问题3
Select Distinct Sample ID
where Microcomment = 'No Test'
and (only display sampleID’s that don't appear in the Query 1 & 2)
我试图实现的最终输出
SampleID | Microcomments | ProductID
---------+-----------------+----------
111101 | Unsatisfactory | ABC123
222202 | Unsatisfactory | A21
333301 | Satisfactory | AB11
444403 | Unsatisfactory | ABCD123
555504 | Unsatisfactory | BA123
666601 | Satisfactory | BBB21
请注意,这不是实际的数据我想你让它变得比需要的更困难了 再次编辑 试试下面这些: -最终输出: 选择SampleID、MAXMicrocomments、ProductID 从桌子上 按样本ID、ProductID分组
只要它有不满意的、令人满意的、没有测试值,即按字母顺序排列,并且这个顺序是您希望为样本显示它们的顺序…我认为您使它变得比需要的更困难 再次编辑 试试下面这些: -最终输出: 选择SampleID、MAXMicrocomments、ProductID 从桌子上 按样本ID、ProductID分组 只要它有不满意、满意、没有测试值,即按字母顺序排列,并且此顺序是您希望为样本ID显示它们的顺序…更新 好的,现在我更好地理解了您想要实现的目标,我已经修改了查询 关键是将三个不同的结果集合并在一起。每个集合都是通过使用NOT IN子句排除其他相关集合而创建的
SELECT DISTINCT(t1.SampleID), t1.Microcomments, t1.ProductID
FROM t_table t1
WHERE t1.Microcomments = 'Unsatisfactory'
UNION
SELECT DISTINCT(t2.SampleID), t2.Microcomments, t2.ProductID
FROM t_table t2
WHERE t2.Microcomments = 'Satisfactory' AND t2.SampleID NOT IN (SELECT SampleID from t_table WHERE Microcomments = 'Unsatisfactory')
UNION
SELECT DISTINCT(t3.SampleID), t3.Microcomments, t3.ProductID
FROM t_table t3
WHERE t3.Microcomments = 'No Test' AND t3.SampleID NOT IN (SELECT SampleID from t_table WHERE Microcomments IN('Satisfactory','Unsatisfactory'))
ORDER BY SampleID ASC;
我在这里创建了一个sql小提琴:
让我知道,如果这是你要找的
-原创的-
可以使用WHERE子句中的OR语句将要搜索的所有条件组合到一个查询中。除非数据比您显示的更复杂,否则这将对您有效
SELECT DISTINCT SampleID, Microcomments, ProductID
FROM table_name
WHERE Microcomments = ‘Satisfactory’ OR Microcomments = ‘Satisfactory’ OR Microcomments = ‘No Test’
ORDER BY Microcomments
更新
好的,现在我更好地理解了您想要实现的目标,我已经修改了查询
关键是将三个不同的结果集合并在一起。每个集合都是通过使用NOT IN子句排除其他相关集合而创建的
SELECT DISTINCT(t1.SampleID), t1.Microcomments, t1.ProductID
FROM t_table t1
WHERE t1.Microcomments = 'Unsatisfactory'
UNION
SELECT DISTINCT(t2.SampleID), t2.Microcomments, t2.ProductID
FROM t_table t2
WHERE t2.Microcomments = 'Satisfactory' AND t2.SampleID NOT IN (SELECT SampleID from t_table WHERE Microcomments = 'Unsatisfactory')
UNION
SELECT DISTINCT(t3.SampleID), t3.Microcomments, t3.ProductID
FROM t_table t3
WHERE t3.Microcomments = 'No Test' AND t3.SampleID NOT IN (SELECT SampleID from t_table WHERE Microcomments IN('Satisfactory','Unsatisfactory'))
ORDER BY SampleID ASC;
我在这里创建了一个sql小提琴:
让我知道,如果这是你要找的
-原创的-
可以使用WHERE子句中的OR语句将要搜索的所有条件组合到一个查询中。除非数据比您显示的更复杂,否则这将对您有效
SELECT DISTINCT SampleID, Microcomments, ProductID
FROM table_name
WHERE Microcomments = ‘Satisfactory’ OR Microcomments = ‘Satisfactory’ OR Microcomments = ‘No Test’
ORDER BY Microcomments
如果您的DBMS支持,那么我认为最简单的方法是使用微命令对每个样本中的行进行排序:
SELECT SampleID, TestID, MicroComments, ProductID, CompanyID
FROM ( SELECT SampleID,
TestID,
MicroComments,
ProductID,
CompanyID,
ROW_NUMBER() OVER(PARTITION BY SampleID
ORDER BY CASE WHEN MicroComments = 'UnSatisfactory' THEN 1
WHEN MicroComments = 'Satisfactory' THEN 2
WHEN MicroComments = 'No test' THEN 3
END) AS RowNum
FROM T
) T
WHERE RowNum = 1;
如果您的DBMS不支持它,或者即使它支持,您也可以使用条件聚合得到它。这是基于以下假设,即对于每个样本ID,ProductID和CompanyID都是常量:
SELECT SampleID, ProductID, CompanyID,
CASE WHEN COUNT(CASE WHEN MicroComments = 'UnSatisfactory' THEN 1 END) > 0 THEN 'UnSatisfactory'
WHEN COUNT(CASE WHEN MicroComments = 'Satisfactory' THEN 1 END) > 0 THEN 'Satisfactory'
WHEN COUNT(CASE WHEN MicroComments = 'No test' THEN 1 END) > 0 THEN 'No test'
END AS MicroComments
FROM T
GROUP BY SampleID, ProductID, CompanyID;
如果您的DBMS支持,那么我认为最简单的方法是使用微命令对每个样本中的行进行排序:
SELECT SampleID, TestID, MicroComments, ProductID, CompanyID
FROM ( SELECT SampleID,
TestID,
MicroComments,
ProductID,
CompanyID,
ROW_NUMBER() OVER(PARTITION BY SampleID
ORDER BY CASE WHEN MicroComments = 'UnSatisfactory' THEN 1
WHEN MicroComments = 'Satisfactory' THEN 2
WHEN MicroComments = 'No test' THEN 3
END) AS RowNum
FROM T
) T
WHERE RowNum = 1;
如果您的DBMS不支持它,或者即使它支持,您也可以使用条件聚合得到它。这是基于以下假设,即对于每个样本ID,ProductID和CompanyID都是常量:
SELECT SampleID, ProductID, CompanyID,
CASE WHEN COUNT(CASE WHEN MicroComments = 'UnSatisfactory' THEN 1 END) > 0 THEN 'UnSatisfactory'
WHEN COUNT(CASE WHEN MicroComments = 'Satisfactory' THEN 1 END) > 0 THEN 'Satisfactory'
WHEN COUNT(CASE WHEN MicroComments = 'No test' THEN 1 END) > 0 THEN 'No test'
END AS MicroComments
FROM T
GROUP BY SampleID, ProductID, CompanyID;
示例是否可能有多个微命令?这些都是不错的、非常直接的查询,您应该自己解决,顺便问一下,您使用的是哪种RDBMS?是否为微命令定义了优先级?例如,如果sampleId有不同的微命令,那么最终结果集中应该显示哪个值?您的最终输出来自哪个查询?@i-man-是的,sampleId可以有多个微命令sample可能有多个微命令?这些都是不错的、非常直接的查询,您应该自己解决,顺便问一下,您使用的是哪种RDBMS?是否为微命令定义了优先级?例如,如果sampleId具有不同的微命令,那么最终结果集中应该显示哪个值?您的最终输出来自哪个查询?@i-man-是的,sampleId可以有多个微命令,但在结果集中,微命令可以有“不满意”的值。我的问题是,如何合并查询1、2和3,以消除具有相同样本的结果idbut在resultset Microcomment中可能有“不满意”值我的问题是如何合并查询1 2和3,用相同的样本id删除结果这将返回所有数据,而不删除任何重复的样本id's@KAI,我根据对问题的更好理解更新了回复。更新后的查询也有效。谢谢你花时间和支持!!!抱歉,我无法将其标记为有用的响应,因为我的代表未满15岁。这将返回所有数据,而不会消除任何重复的样本id's@KAI,我根据对问题的更好理解更新了回复。更新后的查询也有效。谢谢你花时间和支持!!!很抱歉,我无法将其标记为有用的响应,因为我的代表年龄在15岁以下。此操作非常有效,非常适合我当前的查询。感谢您的输入和快速支持!!!!这非常有效,很好地符合我当前的查询。感谢您的输入和快速支持!!!!