首页 > 解决方案 > T-SQL 条件“WHERE”子句和“IN”子句包含结果集中的所有键

问题描述

我有两个表:TagHistory,其中TagTable 存储有关所有 的信息,TagNameHistoryTable 存储从逆变器接收到的实时数据。

现在,我有 14 个不同的站点,可以从中获取逆变器的实时日期,如下所示。

SELECT DISTINCT TagName
FROM History
WHERE TagName LIKE '%DailykWh'

输出

我正在使用相同的查询通过将它们与 TagName 分组来查找SUM()Value

SELECT
    TagName,
    SUM (Value) Monthly
FROM
    History h1
WHERE
    TagName IN (
        SELECT DISTINCT
            h2.TagName
        FROM 
            History h2
        WHERE
            h2.TagName LIKE '%DailykWh'
    ) AND 
    DateTime BETWEEN '2020-11-01 00:00:00' AND '2020-11-08 23:59:59'
GROUP BY
    TagName
ORDER BY
    TagName

但结果仅包括第一个 TagName 而不是所有 TagName,如下所示。

输出

如果我对子查询中的所有 TagNames 进行硬编码,那么我将获得来自所有站点的结果。我不想对它们进行硬编码,有没有其他方法可以将所有站点包含在查询结果中?

我是 T-SQL 的新手,我认为可能还有其他东西可以代替IN子句,但我不知道是哪一个。任何帮助将不胜感激,谢谢!

标签: sqlsql-serverwhere-clausein-clause

解决方案


您可以尝试使用加入

SELECT
    t.TagName,
    SUM (Value) Monthly
FROM
    Tag t left join History h on h.tagname=t.tagname
WHERE t.TagName LIKE '%DailykWh'
group by 
    t.TagName
ORDER BY
    t.TagName

推荐阅读