动态选择列名
Dynamically selection of Column Name
我想要 select 列名称 具有非空值和非零值。因此,任何具有 0 或 NULL 的 列名称 不应显示在输出网格中
我有如下来源table
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
可能吗?
类似于:
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
您关于 GROUP-BY
和输出结果的问题令人困惑。
B'cz GROUP-BY
将合并 Result Row-1&2.
但为了获得更好的结果,您可以尝试以下查询以确保安全。
创建Table定义
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
)
注意:请更正您的预期result/question并检查正确的结果作为答案,否则其他用户会糊涂的。
我想要 select 列名称 具有非空值和非零值。因此,任何具有 0 或 NULL 的 列名称 不应显示在输出网格中
我有如下来源table
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
可能吗?
类似于:
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
您关于 GROUP-BY
和输出结果的问题令人困惑。
B'cz GROUP-BY
将合并 Result Row-1&2.
但为了获得更好的结果,您可以尝试以下查询以确保安全。
创建Table定义
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
)
注意:请更正您的预期result/question并检查正确的结果作为答案,否则其他用户会糊涂的。