[英]select row values as column based on GROUP BY column
I have a table with data like this:我有一个包含如下数据的表:
Id Value
-------------------------
01 Id01-Value1
01 Id01-Value2
02 Id02-Value1
02 Id02-Value2
03 Id03-Value1
What I want is我想要的是
Id Value1 Value2
--------------------------------------
01 Id01-Value1 Id01-Value2
02 Id02-Value1 Id02-Value2
03 Id03-Value1
I tried sql PIVOT
but it is not for this type of problem I think.我尝试过 sql PIVOT
但我认为它不适用于此类问题。
I think you can just use min()
and max()
:我认为你可以只使用min()
和max()
:
select id, min(value) as value1,
(case when min(value) <> max(value) then max(value) end) as value2
from t
group by id;
Try this Answer,试试这个答案,
SELECT ID
,MAX(CASE WHEN RN=1 THEN Value ELSE '' END)Value1
,MAX(CASE WHEN RN=2 THEN Value ELSE '' END)Value2
FROM(
SELECT ID,Value
,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Value)RN
FROM Your_Table
)D
GROUP BY ID
ORDER BY ID
On the contrary, PIVOT
is exactly what you need - if you can bear it's damned syntax!相反, PIVOT
正是您所需要的——如果您能忍受它该死的语法! It is relatively flexible but also unwieldy.它相对灵活,但也很笨拙。
SELECT
id
,[1] AS Value1
,[2] AS Value2
FROM
(
SELECT
id
,value
,ROW_NUMBER() OVER (PARTITION BY id ORDER BY value ASC) AS column_number
FROM
YOUR_TABLE_NAME
) AS src
PIVOT
(
MAX(value)
FOR column_number IN ([1],[2])
) AS pvt
ORDER BY
id
This will sort the rows in the value
column alphabetically, and assigns column numbers accordingly in sequence (but you could include different logic, for example to nip the column number off the right-hand side of the value, or name the columns according to the value itself rather than numbering them).这将按字母顺序对value
列中的行进行排序,并按顺序相应地分配列号(但您可以包含不同的逻辑,例如将列号从值的右侧剪掉,或根据值本身而不是编号)。 NULL values will be returned for any column that doesn't have a value.任何没有值的列都将返回 NULL 值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.