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

Sql 选择不同的值,传递到Where子句,sql,sql-server,Sql,Sql Server,我试图查看表中的唯一值,并根据从distinct查询返回的n个值,将它们传递到我的WHERE子句中的后续查询中 让我举个例子 我有一个包含以下列的表: ID | UserName | OtherCondition 我通常计算总记录,即与其他条件上的WHERE子句匹配的记录,以及它们的相关百分比,如下所示: SELECT 'Report' as ReportName, COUNT(*) Match, (SELECT COUNT(*) FROM [MyTable) Total, CAST(COU

我试图查看表中的唯一值,并根据从distinct查询返回的n个值,将它们传递到我的WHERE子句中的后续查询中

让我举个例子

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

ID | UserName | 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列集成到这个查询中。我的意思是,我将查看上表,并获得所有记录的所有唯一用户名(可能也是空/空的)。此用户名将以上述格式(类似于“Report-”[username]的格式)传递到ReportName(当前为字符串文本),并且还将传递到第二个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'

希望我能理解你想要什么:

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;

此查询提供您文章最后两个查询的输出。

您的问题非常令人困惑。也许将sqlfiddle与所需的输出组合在一起会有所帮助。我根本不明白你想做什么,我会努力的。作为澄清,我试图通过用户名生成一个报告,该报告匹配一个常量where条件。也就是说,在本例中,OtherCondition=MyCondition(始终如此),但是我尝试获取数据库中的所有唯一用户,并将它们传递到where查询,即username=each unique user。最好,它可以切换顶部显示“Report”的部分,也就是当前字符串常量。Nope。那只会让我更加困惑。尝试访问sqlfiddle.com并创建ddl和示例数据。然后你可以解释你想要什么作为输出,我们可以提供帮助。也许你只需要将select中的第一列更改为“select'Report-'+UserName as ReportName,”