从几乎相似的行中仅选择(显示)不同的列

时间:2019-06-14 14:47:18

标签: sql select db2

我有一个包含50多个列的表。为了做出决定,我分析了所有变体数据。
实际上是我的查询:
SELECT maincol, count(maincol) FROM table where (conditions) group by maincol having count(maincol) > 1
然后:
SELECT * FROM table where (conditions) and maincol = (previous result)
在咨询之前,显示所有行,我必须一个一个地搜索

col1, col2, col3, col4, col5, col6, manycolumns..., colN
5       7    1      13   341     9                    123
5       7    2      13   341     5                    123

我想得到:

col3,   col6
  1      9
  2      5

因为很难逐列手动搜索。
-N列可能不同
-我无权访问凭据,因此无法使用编程语言来管理结果。
-使用DB2

1 个答案:

答案 0 :(得分:0)

这会有些乏味,但值得。假设col1到coln都是相同的类型。如果不是,则将每个子句都强制转换为select子句中的字符。

结果集将标识多次出现的maincol值,这些值也具有一列或多列具有不同值的列。不同的列将被命名。

选择maincol,colname,count(不同的colvalue) 从( 选择maincol,“ column1”作为列名,col1作为列值 从表 联盟 选择maincol,“ column2”作为列名,col2作为列值 从表 联盟 选择maincol,“ column3”作为列名,col3作为列值 从表 对其余的列重复此模式 ) 按maincol,colname分组 计数(不同的colvalue)> 1

您甚至可以从上方将结果集与原始表连接起来,以显示整行,包括不同列的名称:

选择b.colname,a。* 从表a中选择 从上方包括整个查询 )作为b 其中a.maincol = b.maincol