单独在多个列中组合多个sql查询的结果
我有多个查询,在一列中只生成一个计数(仅一个单元格)。我需要合并这些列 假设查询是:单独在多个列中组合多个sql查询的结果,sql,plsql,informix,Sql,Plsql,Informix,我有多个查询,在一列中只生成一个计数(仅一个单元格)。我需要合并这些列 假设查询是: select count (*) from address where city = NULL as citycount; select count (*) from address where countrycode = 4 as countrycount; select count (*) from address; 以上查询将返回结果: citycount 40 countrycount 50
select count (*) from address where city = NULL as citycount;
select count (*) from address where countrycode = 4 as countrycount;
select count (*) from address;
以上查询将返回结果:
citycount
40
countrycount
50
count(*)
400045
我希望以这样的方式组合上述查询,以便得到以下结果:
citycount countrycount count(*)
40 50 400045
这意味着将合并这些列。我有30多个问题。
提前感谢使用SUM和CASE表达式:
select
sum(case when city = NULL then 1 else 0 end ) as citycount,
sum(case when countrycode=4 then 1 else 0 end ) as countrycount,
count(*) as countt
from address
试试这样的。。。希望能有帮助
CREATE TABLE #TEST
(
ID INT IDENTITY(1,1) NOT NULL,
Cnt INT NOT NULL,
DescTableName VARCHAR(100) NULL
)
INSERT INTO #TEST (Cnt, DescTableName)
SELECT COUNT(*) AS Cnt, 'citycount' AS DescTableName FROM dbo.[Subscriptions]
INSERT INTO #TEST (Cnt, DescTableName)
SELECT COUNT(*) AS Cnt, 'countrycount' AS DescTableName FROM dbo.ReportSchedule
INSERT INTO #TEST (Cnt, DescTableName)
SELECT COUNT(*) AS Cnt, 'address' AS DescTableName FROM msdb.dbo.sysjobs
SELECT * FROM #TEST
DROP TABLE #TEST
我想知道
city=null
是如何得到结果的。您是在使用Oracle(支持PL/SQL)还是Informix(不支持Oracle的PL/SQL)?Informix(或标准SQL,AFAIK)不接受=NULL
符号,因此您可能应该使用Oracle(如PL/SQL标记描述中所暗示的)来标记问题,也可能不使用Informix,除非您解释您需要双语解决方案(在这种情况下,您将不会使用=NULL
)。表达式COUNT(*)-COUNT(city)
应该给出空城市的数量(COUNT(列名)
计算非空值的数量)。这是基于用户的查询,他可能已经设置了ansi null:)是Oracle/plsql还是Informix行为?@jarlh:这不是Informix行为。使用=NULL
会产生Informix通用错误-201:出现语法错误
。当表为空时,使用IS NULL
会产生两个NULL和一个0。感谢Vlad,我也尝试过同样的方法,对于2-3个查询来说效果很好。但不适用于20-30个查询。我们能有最优惠的价格吗way@app:这或多或少是必要的。如果您的聚合具有不同的过滤条件,那么您需要沿着此处的线条使用不同的表达式来计算它们。或者你可以在另一个答案中使用案例公式。查看查询计划将告诉您哪一个是性能更好的变量-这将取决于优化器(并确保您有适当的索引,等等)。这将在#TEST
表中给出三行,不是吗?不是一行有三个值。第二个和第三个操作应该是更新操作,而不是插入操作。
CREATE TABLE #TEST
(
ID INT IDENTITY(1,1) NOT NULL,
Cnt INT NOT NULL,
DescTableName VARCHAR(100) NULL
)
INSERT INTO #TEST (Cnt, DescTableName)
SELECT COUNT(*) AS Cnt, 'citycount' AS DescTableName FROM dbo.[Subscriptions]
INSERT INTO #TEST (Cnt, DescTableName)
SELECT COUNT(*) AS Cnt, 'countrycount' AS DescTableName FROM dbo.ReportSchedule
INSERT INTO #TEST (Cnt, DescTableName)
SELECT COUNT(*) AS Cnt, 'address' AS DescTableName FROM msdb.dbo.sysjobs
SELECT * FROM #TEST
DROP TABLE #TEST