-1 sql sql-server sql-server-2008
id record_name record_value
-------------------------------------
1001 price1 12
1001 price2 1
1001 price3 8
1201 price1 18
1201 price2 2
1201 price3 6
1601 price1 12
1601 price2 8
1601 price3 8
Run Code Online (Sandbox Code Playgroud)
产量
id price1 value price2 value price3 value
--------------------------------------------------------------------------
1001 price1 12 price2 1 price3 8
1201 price1 18 price2 2 price3 6
Run Code Online (Sandbox Code Playgroud)
我收到了错误
子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做.
我用过这个查询:
select distinct
a.id, 'Price1',
(select record_value
from table_name
where id = a.id and record_name = 'price1') as 'value1',
'Price2',
(select record_value
from table_name
where id = a.id and record_name = 'price2') as 'value2',
'Price3',
(select record_value
from table_name
where id = a.id and record_name = 'price3') as 'value3'
from
table_name a
Run Code Online (Sandbox Code Playgroud)
请尝试解决这个问题!
方法有点不同.但你可以这样做:
SELECT
table_name.id,
'price1' AS price1,
SUM(CASE WHEN record_name='price1' THEN record_value ELSE 0 END) AS value1,
'price2' AS price2,
SUM(CASE WHEN record_name='price2' THEN record_value ELSE 0 END) AS value2,
'price3' AS price2,
SUM(CASE WHEN record_name='price3' THEN record_value ELSE 0 END) AS value3
FROM
table_name
GROUP BY
table_name.id
Run Code Online (Sandbox Code Playgroud)
更新
回复评论.是的,它会奏效.如果我们看一下像这样的简单测试:
DECLARE @tbl TABLE(ID INT, test VARCHAR(100))
INSERT INTO @tbl
VALUES
(1,'foo'),
(1,'foo'),
(1,'bar'),
(1,'bar')
Run Code Online (Sandbox Code Playgroud)
此查询将使用静态值作为price1.
SELECT
tbl.ID,
'price1' as price1
FROM
@tbl AS tbl
GROUP BY
tbl.ID
Run Code Online (Sandbox Code Playgroud)
更新2
然后,如果你不想要SUM值.然后你可以MAX改用.像这样:
SELECT
table_name.id,
'price1' AS price1,
MAX(CASE WHEN record_name='price1' THEN record_value ELSE 0 END) AS value1,
'price2' AS price2,
MAX(CASE WHEN record_name='price2' THEN record_value ELSE 0 END) AS value2,
'price3' AS price2,
MAX(CASE WHEN record_name='price3' THEN record_value ELSE 0 END) AS value3
FROM
table_name
GROUP BY
table_name.id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |