Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单独在多个列中组合多个sql查询的结果_Sql_Plsql_Informix - Fatal编程技术网

单独在多个列中组合多个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