将两个不同 where 的查询合并为 1

Posted

技术标签:

【中文标题】将两个不同 where 的查询合并为 1【英文标题】:merge two queries with different where into 1 【发布时间】:2014-09-19 13:06:30 【问题描述】:

我有一个如下的存储过程。

DECLARE @Temp TABLE
(...)

INSERT INTO @Temp
SELECT  MeasureDate, col1, col2
FROM Table1
WHERE Col3 = 1

INSERT INTO @Temp
SELECT  MeasureDate, col1, col2
FROM Table1
WHERE Col3 = 1
AND Col4 = 7000

SELECT SUM(col1) / SUM(col2) AS Percentage, MAX(), MeasureDate
FROM @Temp
GROUP BY MeasureDate

我在临时表中做了两次插入,第二次插入额外的 WHERE 但相同的列在同一张表中,然后我在临时表上执行 SUM(col1) / SUM(col2) 以返回我需要的结果。有没有办法将所有这些插入和选择合并到一个语句中,所以我不使用临时表并从 Table1 中进行一次选择?或者即使我仍然需要临时表,将选择合并为一个选择而不是两个单独的选择?存储过程可以正常工作,只是在寻找一种缩短它的方法。

谢谢。

【问题讨论】:

可以这样做,但您最好提供更多细节。不清楚为什么要将重复数据放入临时表中,如果这是一个要求或一个错误,并且在构建查询时会产生巨大的差异。 你说得对,我更正了查询,两个查询不同,一个是 where col3=2,另一个是 where col3=1 and col4=7000。这不是重复数据 【参考方案1】:
SELECT  MeasureDate, col1, col2
FROM Table1
WHERE Col3 = 2
  or (Col3 = 1 AND Col4 = 7000);


SELECT  sum(col1) / sum(col2) AS Percentage , GROUP BY MeasureDate
FROM Table1
WHERE Col3 = 2
  or (Col3 = 1 AND Col4 = 7000)
GROUP BY MeasureDate;

【讨论】:

【参考方案2】:

您可以将前两个查询中的条件与or 运算符结合起来:

SELECT   SUM(col1) / SUM(col2) AS Percentage, MeasureDate
FROM     Table1
WHERE    (Col3 = 2) OR (Col3 = 1 AND Col4 = 7000)
GROUP BY MeasureDate

【讨论】:

以上是关于将两个不同 where 的查询合并为 1的主要内容,如果未能解决你的问题,请参考以下文章

如何合并两个或多个具有不同 where 条件的查询?我必须重用在第一个代码中使用的代码

C#,Linq2Sql:是不是可以将两个可查询对象合并为一个?

Microsoft Access 查询 - 将两个查询合并为一个

SQL合并两个具有不同列号的选择查询,同时删除重复项?

SQL/Impala:将多个查询(具有不同的 where 子句)合并为一个

mysql: 两个字段合并,字符时间转时间戳,别名字段作为where条件查询