【问题标题】:Adding columns in result in SQL from one column在 SQL 中从一列添加列
【发布时间】:2014-10-29 17:36:48
【问题描述】:

第一次来这里,所以我没有看到这样的问题,所以我希望你能帮助我。

我正在尝试向查询结果添加 2 列。

  • 如果是aa.actionid = '123',则在名为test1 的列中返回结果。

  • 如果aa.actionid = '5',则创建一个名为 this 的列,将每吨价格放入名为 test 1test 2 的列中

这是我目前所拥有的。我不确定这是否正确:

SELECT CO.INVOICE_PREFIX
  ,C.CUSTOMER_NAME 
  ,S.SITE_NAME 
  ,W.DESCRIPTION
  ,AA.PER_TON_PRICE
  ,AA.ACTION_ID
  ,AA.APPLICABLE_ACTION_ID 
  ,OI.VALID_UNTIL 
  ,CON.END_DATE 
  ,CC.DESCRIPTION 
  ,(case when aa.actionid = '123' then aa.per_ton_price Test1
  ,(case when aa.actionid = '5' then) aa.per_ton_price test2

FROM CUSTOMER C
JOIN SITE S ON C.CUSTOMER_ID = S.CUSTOMER_ID
JOIN CONTRACT CON ON C.CUSTOMER_ID = CON.CUSTOMER_ID
JOIN SITE_ORDER SO ON SO.SITE_ID = S.SITE_ID
JOIN COMPANY_OUTLET CO ON SO.COMPANY_OUTLET_ID = CO.COMPANY_OUTLET_ID 
JOIN ORDER_ITEM OI ON OI.ORDER_ID = SO.SITE_ORDER_ID
JOIN PRODUCT P ON OI.PRODUCT_ID = P.PRODUCT_ID
JOIN APPLICABLE_ACTION AA ON AA.ORDER_ITEM_ID = OI.ORDER_ITEM_ID
JOIN COMPETITIVE_CONDITION CC ON CC.COMPETITIVE_CONDITION_ID = OI.COMPETITIVE_CONDITION_ID
LEFT JOIN WASTE W ON W.WASTE_ID = AA.WASTE_ID
JOIN ACTION A ON AA.ACTION_ID = A.ACTION_ID
WHERE AA.ACTION_ID IN ('123','5')
AND P.PRODUCT_ID='2'
AND OI.VALID_UNTIL >= GETDATE()

【问题讨论】:

    标签: sql case multiple-columns


    【解决方案1】:

    您总是需要为所有行返回两列。您可以做的是将“未使用”列(取决于行数据)映射到默认值,例如 null,例如:

     ,case when aa.actionid = '123' then aa.per_ton_price else null end Test1
     ,case when aa.actionid = '5' then aa.per_ton_price else null end test2
    

    【讨论】:

      【解决方案2】:

      数据库只会返回一个 TABLE,所以如果您考虑一下 Table 的概念,那么一行的列数会与其他行不同吗?可能不是。因此,您真正想要做的是将特定列的值设置为 null,而不是尝试根本不输出该列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-03
        • 1970-01-01
        • 1970-01-01
        • 2022-07-18
        • 2014-06-27
        • 1970-01-01
        • 2017-03-02
        • 2020-12-11
        相关资源
        最近更新 更多