SQL 用于根据 SQL 服务器中的列值获取具有列的 table 的查询设计
SQL query design for getting a table with column depending on a column value in SQL Server
我想在 SQL 服务器中执行 SQL 查询以获得 table:
表 1:
id t value
1 R 2412
1 Q 98797
2 R 132
2 Q 7589
我需要得到table:
id R_value Q_value
1 2412 98797
2 132 7589
我用了 case 和 when,但是我得到了
id R_value Q_value
1 2412 null
1 null 98797
如有任何帮助,我们将不胜感激。
使用条件聚合:
SELECT
id,
MAX(CASE WHEN t = 'R' THEN value END) AS R_value,
MAX(CASE WHEN t = 'Q' THEN value END) AS Q_value
FROM YourTable
GROUP BY id
您可以将 max
或 min
与 group by
一起使用以删除 null
值并聚合具有相同 id
的行:
select id
, min(case when t = 'R' then value end) as R_value
, min(case when t = 'Q' then value end) as Q_value
from tbl
group by id
您可以像这样轻松使用 PIVOT
table 运算符:
SELECT
id,
R AS R_value,
Q AS Q_value
FROM table1 AS t1
PIVOT
(
MAX(value)
FOR t IN(R, Q)
) AS p;
这会给你:
| id | R_value | Q_value |
|----|---------|---------|
| 1 | 2412 | 98797 |
| 2 | 132 | 7589 |
我想在 SQL 服务器中执行 SQL 查询以获得 table:
表 1:
id t value
1 R 2412
1 Q 98797
2 R 132
2 Q 7589
我需要得到table:
id R_value Q_value
1 2412 98797
2 132 7589
我用了 case 和 when,但是我得到了
id R_value Q_value
1 2412 null
1 null 98797
如有任何帮助,我们将不胜感激。
使用条件聚合:
SELECT
id,
MAX(CASE WHEN t = 'R' THEN value END) AS R_value,
MAX(CASE WHEN t = 'Q' THEN value END) AS Q_value
FROM YourTable
GROUP BY id
您可以将 max
或 min
与 group by
一起使用以删除 null
值并聚合具有相同 id
的行:
select id
, min(case when t = 'R' then value end) as R_value
, min(case when t = 'Q' then value end) as Q_value
from tbl
group by id
您可以像这样轻松使用 PIVOT
table 运算符:
SELECT
id,
R AS R_value,
Q AS Q_value
FROM table1 AS t1
PIVOT
(
MAX(value)
FOR t IN(R, Q)
) AS p;
这会给你:
| id | R_value | Q_value |
|----|---------|---------|
| 1 | 2412 | 98797 |
| 2 | 132 | 7589 |