【问题标题】:select a value of a column reported by another column选择另一列报告的列的值
【发布时间】:2013-09-17 06:55:47
【问题描述】:

我有一张这样的桌子

col_name   col_white col_red col_brown col_yellow col_one col_two ....
col_white  1          
col_red              4
col_two                                                   12
....

我必须做一个选择才能得到这个结果:

col_name     col_value
col_white    1
col_red      4
col_two      12

列数是动态的。我该怎么做?

谢谢

【问题讨论】:

    标签: sql sql-server select dynamic-columns


    【解决方案1】:

    一种方法是

    select 'Col_white' as col_name, Col_white from table
    union all
    select 'Col_red' as col_name, Col_red from table
    .
    .
    select 'Col_two' as col_name, Col_two from table
    

    您可能还需要了解 UNPIVOT

    【讨论】:

      【解决方案2】:
      select t.col_name, max(t.col_value)
      from
      (select col_name, col_value
      from yourtable) t
      group by t.col_name
      

      【讨论】:

        【解决方案3】:

        这个可以试试吗?

        SELECT  col_name,CASE WHEN col_name = 'col_white' THEN col_white ELSE CASE WHEN col_name = 'col_red' THEN col_red ELSE CASE WHEN col_name = 'col_two' THEN col_two END
                           END END AS test FROM dbo.Table_1
        

        【讨论】:

          【解决方案4】:

          我认为动态 sql 是解决这个问题的方法。

          DECLARE @SQL AS NVARCHAR(1024)
          DECLARE @COL AS NVARCHAR(255)
          
          DECLARE CUR CURSOR FAST_FORWARD FOR
          SELECT  t.col_name
          FROM mytable t
          
          CREATE TABLE #TempTable(
          col_name varchar(50),
          col_value varchar(50))
          
          OPEN CUR
          FETCH NEXT FROM CUR INTO @COL
          WHILE @@FETCH_STATUS = 0
          BEGIN
              SELECT @SQL = 'INSERT INTO #TempTable SELECT COL_NAME,'+@COL+' FROM mytable where col_name='''+@COL+''''
          
              EXEC (@SQL)
              FETCH NEXT FROM CUR INTO @COL
          END
          
          CLOSE CUR;
          DEALLOCATE CUR;
          
          SELECT * FROM #TempTable
          
          DROP TABLE #TempTable
          

          【讨论】:

            猜你喜欢
            • 2022-09-29
            • 1970-01-01
            • 2020-03-12
            • 1970-01-01
            • 2018-08-25
            • 2014-10-05
            • 2014-01-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多