我有以下查询效果很好,但是如何在其select语句中添加多列?以下是查询:
SELECT ISNULL(
(SELECT DISTINCT a.DatasourceID
FROM [Table1] a
WHERE a.DatasourceID = 5 AND a.AgencyID = 4 AND a.AccountingMonth = 201907), NULL) TEST
因此,目前我只获得一列(TEST),但想添加其他列,例如DataSourceID,AgencyID和AccountingMonth。
答案 0 :(得分:0)
在我看来,您似乎想查看数据是否存在,我想您的AgencyID是代理表的外键,DataSourceID也是数据源,并且您有AccountingMonth表,其中包含所有会计期间:
SELECT ds.ID as DataSourceID , ag.ID as AgencyID , am.ID as AccountingMonth ,
ISNULL(COUNT(a.*),0) as Count
FROM [Table1] a
RIGHT JOIN [Datasource] ds ON ds.ID = a.DataSourceID
RIGHT JOIN [Agency] ag ON ag.ID = a.AgencyID
RIGHT JOIN [AccountingMonth] am on am.ID = a.AccountingMonth
GROUP BY ds.ID, ag.ID, am.ID
通过这种方式,您可以按条件查看每个组的记录数。注意RIGHT join,如果要包括“ Right”表中的所有记录,则必须使用RIGHT JOIN。
在您的查询中,您具有DISTINCT a.DatasourceID和WHERE a.DatasourceID = 5,如果表中存在与您的WHERE条件匹配的行,则返回5,如果没有数据,则返回null。如果删除WHERE a.DatasourceID = 5,则查询将因错误而中断:子查询返回了多行。
答案 1 :(得分:0)
您的操作方式仅允许一列和一条记录,并为其指定测试名称。看起来您真的不需要测试null。因为您返回的是null,所以对您没有任何帮助。删除所有空测试,并返回完整的记录集也将您的返回限制为1条记录。使用单个表时,如果没有空格或关键字,则不需要别名,不需要别名。如果需要查看是否有空记录集,请在调用程序中对其进行测试。
SELECT DatasourceID, AgencyID,AccountingMonth
FROM Table1
WHERE DatasourceID = 5 AND AgencyID = 4 AND AccountingMonth = 201907
答案 2 :(得分:0)
如果您要为某个条件(或请求的值)输出一行,并在不满足条件的情况下输出一行, 您可以在FROM子句中为请求的值设置一个伪表,并与Table1进行左外部联接。
SELECT ISNULL(Table1.DatasourceId, 999999),
Table1.AgencyId,
Table1.AccountingMonth,
COUNT(*) as count
FROM ( VALUES (5, 4, 201907 ),
(6, 4, 201907 ))
AS requested(DatasourceId, AgencyId, AccountingMonth)
LEFT OUTER JOIN Table1 ON requested.agencyid=Table1.AgencyId
AND requested.datasourceid = Table1.DatasourceId
AND requested.AccountingMonth = Table1.AccountingMonth
GROUP BY Table1.DatasourceId, Table1.AgencyId, Table1.AccountingMonth
请注意: