簡體   English   中英

根據列值返回SQL Server列名和相應的值

[英]Return SQL Server column name and corresponding value based on column value

如何根據每條記錄的列值返回列名和值?

我有這個: 我有這個

我想更新

first_color,顏色名稱具有最高值

first_value具有最高值,依此類推,如下面的代碼段所示。

注意:這只是一個示例,我有超過100列我需要列名稱和前5列/值的值。 所以,如果可能的話,尋找動態的SQL。

我要這個

我到目前為止,使用交叉申請。

在此輸入圖像描述

SQL Server方法

也許與CROW APPLY一起使用ROW_NUMBER()

Select A.* 
      ,B.*
 from  YourTable2 A
 Cross Apply (Select First_Color  = max(case when RN=1 then Item end)  
                    ,First_Value  = max(case when RN=1 then Value end)  
                    ,Second_Color = max(case when RN=2 then Item end)  
                    ,Second_Value = max(case when RN=2 then Value end)  
                From (Select *,RN=Row_Number() over (Order by Value Desc)
                        From ( values ('Red',Red)
                                     ,('Green',Green)
                                     ,('Blue',Blue)
                                     ,('Black',Black)
                               ) B1 (Item,Value)
                     ) B2
             ) B

返回

unique_id   Red Green   Blue    Black   First_Color First_Value Second_Color    Second_Value
abc12       1   2       4       7       Black       7           Blue            4
mnc23       2   4       1       3       Green       4           Black           3

有了新的信息,這將無需動態地取消數據。 如果需要,你可以PIVOT

Select A.unique_id
      ,C.*
      ,ColNr = Row_Number() over (Partition By unique_id Order by Value Desc)
 From YourTable A
 Cross Apply ( values (cast((Select A.* for XML RAW) as xml))) B(XMLData)
 Cross Apply (
                Select Field = a.value('local-name(.)','varchar(100)')
                      ,Value = a.value('.','varchar(max)')  
                 From  B.XMLData.nodes('/row')  as C1(n)
                 Cross Apply C1.n.nodes('./@*') as C2(a)
                 Where a.value('local-name(.)','varchar(100)') not in ('unique_id')
             ) C

返回

unique_id   Field   Value   ColNr
abc12       Black   7       1
abc12       Blue    4       2
abc12       Green   2       3
abc12       Red     1       4
mnc23       Green   4       1
mnc23       Black   3       2
mnc23       Red     2       3
mnc23       Blue    1       4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM