我要选择具有非null和非零值的列名。因此,任何具有0或NULL的列名都不应在输出网格中显示
我的源表如下
col1 col2 col3 col4 col5D Col6D Col7D Col8D
Abc 0 1 John 0 0 0 0
Abc 1 2 John 1 0 0 0
Abc 2 3 John 0 0 0 0
Abc 3 4 John 0 1 0 0
Xyz 0 1 Ron 0 0 0 0
Xyz 1 2 Ron 0 0 0 0
Xyz 2 3 Ron 0 0 1 0
Xyz 3 4 Ron 0 0 0 0
我想按Col1
分组,并将Col1, MIN(Col2), MIN(Col3), MIN(Col4)
和ColRes
显示为(值大于0的列的名称)
预期的输出如下:
col1 col2 col3 col4 ColRes
Abc 1 2 John Col5D
Abc 3 4 John Col6D
Xyz 2 3 Ron Col7D
有可能吗?
答案 0 :(得分:1)
您对GROUP-BY
和输出结果的疑问令人困惑。
B'cz GROUP-BY
将合并结果行1&2 。
但是为了获得更好的结果,您可以尝试在以下查询中查询担保人。
创建表定义
Create table Table1
(
col1 varchar(10),
col2 int,
col3 int,
col4 varchar(10),
col5D int,
col6D int,
col7D int,
col8D int
)
GO
insert into Table1
values('Abc',0,1,'John',0,0,0,0)
GO
insert into Table1
values('Abc',1,2,'John',1,0,0,0)
GO
insert into Table1
values('Abc',2,3,'John',0,0,0,0)
GO
insert into Table1
values('Abc',3,4,'John',0,1,0,0)
GO
insert into Table1
values('Xyz',0,1,'Ron',0,0,0,0)
GO
insert into Table1
values('Xyz',1,2,'Ron',0,0,0,0)
GO
insert into Table1
values('Xyz',2,3,'Ron',0,0,1,0)
GO
insert into Table1
values('Xyz',3,4,'Ron',0,0,0,0)
结果①→,如预期结果中所示,您应尝试执行此查询。
SELECT
COL1, COL2, COL3, COL4,
CASE
WHEN ISNULL(COL5D,0) > 0 THEN 'COL5D'
WHEN ISNULL(COL6D,0) > 0 THEN 'COL6D'
WHEN ISNULL(COL7D,0) > 0 THEN 'COL7D'
WHEN ISNULL(COL8D,0) > 0 THEN 'COL8D' END
As ColRes
FROM TABLE1
WHERE ISNULL(COL5D,0) > 0 OR ISNULL(COL6D,0) > 0 OR ISNULL(COL7D,0) > 0 OR ISNULL(COL8D,0) > 0
那么输出将是:(避免使用GROUP-BY
)
结果②→,如要使用的问题 GROUP-BY
中所示,那么您应该尝试此查询。
SELECT
COL1, MIN(COL2) AS COL2, MIN(COL3) AS COL3, COL4 AS COL4,
MAX(CASE
WHEN ISNULL(COL5D,0) > 0 THEN 'COL5D'
WHEN ISNULL(COL6D,0) > 0 THEN 'COL6D'
WHEN ISNULL(COL7D,0) > 0 THEN 'COL7D'
WHEN ISNULL(COL8D,0) > 0 THEN 'COL8D' END
) As ColRes
FROM TABLE1
WHERE ISNULL(COL5D,0) > 0 OR ISNULL(COL6D,0) > 0 OR ISNULL(COL7D,0) > 0 OR ISNULL(COL8D,0) > 0
GROUP BY COL1,COL4
然后输出将是:(使用GROUP-BY
)
注意 :请更正您的预期结果/问题,并将正确的结果作为“答案”进行检查,否则其他用户会感到困惑。
答案 1 :(得分:0)
类似的东西:
select col1, col2, col3, col4
, case when col5D > 0 then 'col5d' when col6D > 0 then 'col6d' when col7D > 0 then 'col7d' when col8D > 0 then 'col8d' else '' end
from table1
where col5d > 0 or col6D > 0 or col7D > 0 or col8D > 0