简体   繁体   English

根据 GROUP BY 列选择行值作为列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM