选择不同的值,传递到 Where 子句

Posted

技术标签:

【中文标题】选择不同的值,传递到 Where 子句【英文标题】:Select Distinct Values, Pass Into Where Clause 【发布时间】:2014-08-13 21:00:22 【问题描述】:

我正在尝试查看表中的唯一值,并根据从不同查询返回的 n 个值,将这些值传递到我的 WHERE 子句中的后续查询中。

让我举个例子。

我有一个包含以下列的表格:

ID | UserName | OtherCondition

我通常计算总记录,那些匹配 OtherCondition 上的 WHERE 子句的记录,以及它们的相关百分比,如下所示:

SELECT 'Report' as ReportName,
COUNT(*) Match, 
(SELECT COUNT(*) FROM [MyTable) Total,
CAST(COUNT(*) AS FLOAT)/CAST((SELECT COUNT(*) FROM [MyTable]) AS FLOAT)*100 Percentage
FROM [MyTable]   
WHERE OtherCondition = MyCondition

现在,我正在尝试将 UserName 列集成到此查询中。我的意思是,会发生什么是我查看上表,并获取所有记录的所有唯一用户名(这也可能为空/null)。这个用户名将被传递到上面的 ReportName (当前是一个字符串文字)(格式类似于 'Report - ' [username]),这也将被传递到第二个 WHERE 条件.总的来说,WHERE 条件如下所示:

WHERE OtherCondition = MyCondition AND UserName = [The Passed in unique username, from the not yet defined query]

基本上,这可以让我找到所有唯一用户,并提供基于用户的报告。

一些示例数据:

ID | UserName | OtherCondition
1    Mary         X
2    John         X
3    Mary         X

预期结果:

 SELECT 'Report - Mary' as ReportName,
    COUNT(*) Match, 
    (SELECT COUNT(*) FROM [MyTable) Total,
    CAST(COUNT(*) AS FLOAT)/CAST((SELECT COUNT(*) FROM [MyTable]) AS FLOAT)*100 Percentage
    FROM [MyTable]   
    WHERE OtherCondition = x AND UserName = 'Mary'


 SELECT 'Report - John' as ReportName,
    COUNT(*) Match, 
    (SELECT COUNT(*) FROM [MyTable) Total,
    CAST(COUNT(*) AS FLOAT)/CAST((SELECT COUNT(*) FROM [MyTable]) AS FLOAT)*100 Percentage
    FROM [MyTable]   
    WHERE OtherCondition = x AND UserName = 'John'

【问题讨论】:

你的问题很混乱。也许将 sqlfiddle 与所需的输出放在一起会有所帮助。我根本不明白你想要做什么。 我会试试的。作为澄清,我正在尝试按用户名进行报告,该报告与常量 where 条件匹配。意思是,在这种情况下,OtherCondition = MyCondition(总是如此)但是我试图获取数据库中的所有唯一用户,并将它们传递给 where 查询,即用户名 = 每个唯一用户。最好,它可以切换显示“报告”的顶部,以及当前字符串常量。 不。那只会让我更加困惑。尝试访问 sqlfiddle.com 并创建 ddl 和示例数据。然后你可以解释你想要什么作为输出,我们可以提供帮助。 也许您只需将选择中的第一列更改为“SELECT 'Report - ' + UserName as ReportName”, 【参考方案1】:

希望我明白你想要什么:

SELECT ('Report - '+ UserName) as ReportName, 
       COUNT(*) Match, (SELECT COUNT(*) FROM [MyTable]) Total,
       CAST(COUNT(*) AS FLOAT) /
         CAST((SELECT COUNT(*) FROM [MyTable]) AS FLOAT)*100 Percentage
FROM [MyTable]   
WHERE OtherCondition = x
GROUP BY UserName;

此查询提供您帖子的最后两个查询的输出。

【讨论】:

以上是关于选择不同的值,传递到 Where 子句的主要内容,如果未能解决你的问题,请参考以下文章

Sql where 子句

BigQuery:在WHERE子句中使用基于当前行中的值的过滤器进行选择

通过在 where 子句中传递值来选择数据,如果值匹配则返回该数据,否则返回所有数据

如何在光标的 select 语句 where 子句中传递逗号分隔值

具有多个带有 AND 类型逻辑连接的 where IN 子句的配置单元查询

Oracle 12c - 根据不同表中的值动态生成 where 子句