从一列添加SQL中的结果列

时间:2014-10-29 17:36:49

标签: sql case multiple-columns

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

我正在尝试向查询结果添加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()

2 个答案:

答案 0 :(得分:2)

您将始终需要为所有行返回两列。您可以做的是映射未使用的'列(取决于行数据)为默认值,例如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

答案 1 :(得分:1)

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