2017-03-03 215 views
0

我是新来的SQL,我坚持的东西,肯定很容易解决,但是让我疯狂。我有一个巨大的AS400 txt数据导出,我需要从中获取一些数据。使用单个查询,我可以得到正确的数字,但是我想知道是否有办法编写一个查询,该查询给出了一个包含四个结果的表,每个查询都在一个列中。UNION ALL在同一个表中导致不同的列?

这些都是四个查询:

SELECT COUNT([DATA1]) FROM (SELECT DISTINCT [DATA1] FROM STATUS); 
SELECT COUNT([DATA2]) FROM (SELECT DISTINCT [DATA1], [DATA2], [DATA3] FROM STATUS); 
SELECT COUNT([DATA3]) FROM (SELECT DISTINCT [DATA1], [DATA2], [DATA3], [TAL] FROM STATUS); 
SELECT SUM([UNITS]) AS TOTAL FROM STATUS; 

试图与UNION ALL,但所有的结果在同一列中显示出来。

有没有办法做到这一点?在一个查询中获取四个数字,并将每个数字导入不同的列。

非常感谢您的帮助和时间。

+1

你能告诉我们您预期的输出? – balaji

+1

不相关,但:第一个查询可以简化为'select count(distinct data1)from status;'(尽管我希望SQL Server足够聪明,可以自己做) –

+0

您好,感谢您的回复。 DISTINCT是必要的,因为在文档的列中,相同的数字重复多次。这个想法是要获得该列中存储了多少个唯一的数字。例如,假设第1列有:第10个重复五次,第12个重复七次。我需要获得的是列中存储了多少个唯一数字的计数。在这个例子中,两个。 – ElCodificadorWey

回答

0

这可能是你想要什么:

SELECT 
(SELECT COUNT([DATA1]) FROM (SELECT DISTINCT [DATA1] FROM STATUS)) [DATA1], 
(SELECT COUNT([DATA2]) FROM (SELECT DISTINCT [DATA1], [DATA2], [DATA3] FROM STATUS)) [DATA2], 
(SELECT COUNT([DATA3]) FROM (SELECT DISTINCT [DATA1], [DATA2], [DATA3], [TAL] FROM STATUS)) [DATA3], 
(SELECT SUM([UNITS]) AS TOTAL FROM STATUS) [UNITS]; 

有可能是空间与全部子查询的进一步改善,但与此查询,你应该得到所有的COUNT结果在一个单行的不同列。

+0

你好,谢谢你的回复。我需要在查询结尾处添加一个“from STATUS”以使其工作。在编辑一下你的查询以满足我的需要(添加一些WHERE,没有别的)后,我在不同的列中得到正确的结果,但在成千上万行中重复,而不是单行。 – ElCodificadorWey

+0

这可能是由于最后添加了“FROM STATUS”引起的。也许你应该在你的问题中包含一个'CREATE TABLE ...'脚本,并且添加修改过的查询,以便我们开发一个通用模型。 –

0

我在SQL Server 2008中检查,我注意到,对查询取数(数据2)和Count(数据3),我们可能需要指定一个别名内选择具有鲜明,序得到正确的结果。

SELECT DATA1_CNT = (SELECT COUNT([DATA1]) FROM (SELECT DISTINCT [DATA1] FROM STATUS)), 
DATA2_CNT =(SELECT COUNT([DATA2]) FROM (SELECT DISTINCT [DATA1], [DATA2], [DATA3] FROM STATUS) d1), 
DATA3_CNT = (SELECT COUNT([DATA3]) FROM (SELECT DISTINCT [DATA1], [DATA2], [DATA3], [TAL] FROM STATUS) d2), 
UNITS_SUM = (SELECT SUM([UNITS]) AS TOTAL FROM STATUS) 
相关问题