如何转换数据?

时间:2017-03-02 20:22:00

标签: sql sql-server

我拥有的数据表:这里Q3_ [] _ [] 第二个变量是SceneID,第三个变量是要求的产品数量。因此,对于给定的SceneID,他们给出4次记录他们对ProductID的选择,并对下一个SceneID重复相同的操作。所以这里的响应是ProductID。

假设我们有SceneID - 3,4,#次被问到 - 4次,ProductID在回复中 - 9,108,4

ResponseID GYear FieldCode Q_3_1 Q_3_2 Q_3_3 Q_3_4 Q_6_1 Q_6_2 Q_6_3 Q_6_4
YAS101     2017  12        9      108   4    NULL  108   4     NULL  NULL
YAS102     2017  12        108    9    NULL  NULL  9     4     NULL  NULL

我想看的输出是标签中的ProductID而不是1,2,3,4之类的订单号。因此,对于Q_3_1,如果被访者回答9,则应显示为' 1'在Q_3_9其他' 0'

所需的输出:

ResponseID GYear FieldCode Q_3_9 Q_3_108 Q_3_4 Q_6_9 Q_6_108 Q_6_4
YAS101     2017  12        1     1       1     0     1       1
YAS102     2017  12        1     1       0     1     0       1

我现在的代码:

SELECT [ResponseID]
      ,[Gyear]
      ,[Fieldcode]
      ,CASE 
        WHEN q_3_1 = 9 or
             q_3_2 = 9 or
             q_3_3 = 9 then  1 else  0 END as q_3_9
      ,CASE 
        WHEN q_3_1 = 108 or
             q_3_2 = 108 or
             q_3_3 = 108 then 1 else  0 END as q_3_108
      ,CASE 
        WHEN q_3_1 = 4 or
             q_3_2 = 4 or
             q_3_3 = 4 then  1 else  0 END as q_3_4
      ,CASE 
        WHEN q_6_1 = 9 or
             q_6_2 = 9 or
             q_6_3 = 9 then  1 else  0 END as q_6_9
      ,CASE 
        WHEN q_6_1 = 108 or
             q_6_2 = 108 or
             q_6_3 = 108 then 1 else  0 END as q_6_108
      ,CASE 
        WHEN q_6_1 = 4 or
             q_6_2 = 4 or
             q_6_3 = 4 then  1 else  0 END as q_6_4
  FROM YAS_Data1

我想知道的是有更好的简化方法吗?由于我的数据非常庞大。

由于

0 个答案:

没有答案