2017-01-12 50 views
0
列数据一起

基本上我有一个表ABC:获取列名与Teradata的

COl1 | Col2 | COl3 
---- | ---- | ---- 
    1 | a | 12 
    2 | b | 11 
    1 | b | 10 

我需要一个答案是这样的:

column name | distinct value of the column | number of occurrences 
----------- | ---------------------------- | -------------------- 
col1  | 1       | 2 
col1  | 2       | 1 
col2  | a       | 1 
col2  | b       | 2 
col3  | 10       | 1 
col3  | 11       | 1 
col3  | 12       | 1 

有没有办法解决这个使用Teradata的一种方式?

+0

您是否正在寻找SQL来做到这一点,或在Aster内的解决方案? – JNevill

+0

所以你基本上试图分析你的数据? – Andrew

+0

我需要一个SQL来做这件事.. – chaitra

回答

0

为了您的具体的例子,你可以做类似如下:

你基本上做一个联盟,每个列名。如果你的值是不同的数据类型,你必须将它们转换为适用于所有值的某种类型。

SELECT ColumnName,DistinctValue, COUNT(*) AS occurrences 
FROM 
(
SELECT CAST('Col1' AS VARCHAR(4)) AS "ColumnName" 
,CAST(Col1 AS VARCHAR(2)) AS "DistinctValue" 
FROM ABC 
UNION ALL 
SELECT CAST('Col2' AS VARCHAR(4)) AS "ColumnName" 
,CAST(Col2 AS VARCHAR(2)) AS "DistinctValue" 
FROM ABC 
UNION ALL 
SELECT CAST('Col3' AS VARCHAR(4)) AS "ColumnName" 
,CAST(Col3 AS VARCHAR(2)) AS "DistinctValue" 
FROM ABC 
) MyTable 
GROUP BY ColumnName,DistinctValue 
ORDER BY ColumnName,DistinctValue 

如果你需要得到的列名在上面的查询使用,你可以这样做

HELP TABLE ABC; 

Select ColumnName from DBC.ColumnsV 
where Tablename='ABC' 
and DatabaseName='YourDatabaseName'; 

如果你想要的东西一般,对于工程任何表,然后你可能会创建一个存储过程,从DBC.ColumnsV查询列名,然后在动态SQL查询中使用结果。然而,这可能会变得丑陋(无论是在实际编写它时,还是在对付一个具有许多不同值的巨大表格运行时会发生什么)。

+0

谢谢...在寻找一个通用的解决方案...再次感谢! – chaitra