Column 1:
( CASE
WHEN (SELECT edition
FROM clients.dbo.service
WHERE serv_id = hdr.serv_id) = 'General' THEN 'G'
WHEN (SELECT edition
FROM clients.dbo.service
WHERE serv_id = hdr.serv_id) = 'Honors' THEN 'H'
WHEN (SELECT edition
FROM clients.dbo.service
WHERE serv_id = hdr.serv_id) = 'WhosWho' THEN 'Y'
WHEN (SELECT edition
FROM clients.dbo.service
WHERE serv_id = hdr.serv_id) = 'Catholic' THEN 'J'
WHEN (SELECT edition
FROM clients.dbo.service
WHERE serv_id = hdr.serv_id) = 'Conservative' THEN 'B'
ELSE 'H'
END ) AS Edition
Column 2:
(SELECT edition
FROM clients.dbo.service
WHERE serv_id = hdr.serv_id) AS editiontext,
( CASE
WHEN hdr.giftcarddiscount = 1 THEN 'GCDisc'
ELSE ( CASE
WHEN si.itmclass = 'Distrib' THEN '-Disc'
WHEN si.itmclass = 'PremIR' THEN '0' + '-Disc'
WHEN si.itmclass = 'InstResp' THEN '5' + '-Disc'
ELSE ''
END )
END ) AS 'ItemCode'
I need to combine both Edition and ItemCode in a third column. -Disc (ItemCode) should becone like G-Disc but 0-Disc (ItemCode) should become like 0G-Disc.
I need the select as
Select Edition, ItemCode, Edition+ItemCode….
I have used following to create the third column but curious if this could be done in a better way…
( CASE
WHEN (SELECT edition
FROM clients.dbo.service
WHERE serv_id = hdr.serv_id) = 'General' THEN (
CASE
WHEN hdr.giftcarddiscount = 1 THEN 'GCDisc'
ELSE( CASE
WHEN si.itmclass = 'Distrib' THEN 'G-Disc'
WHEN si.itmclass = 'PremIR' THEN '0G' + '-Disc'
WHEN si.itmclass = 'InstResp' THEN '5G' + '-Disc'
ELSE ''
END )
END )
WHEN (SELECT edition
FROM clients.dbo.service
WHERE serv_id = hdr.serv_id) = 'Honors' THEN (
CASE
WHEN hdr.giftcarddiscount = 1 THEN 'GCDisc'
ELSE( CASE
WHEN si.itmclass = 'Distrib' THEN 'H-Disc'
WHEN si.itmclass = 'PremIR' THEN '0H' + '-Disc'
WHEN si.itmclass = 'InstResp' THEN '5H' + '-Disc'
ELSE ''
END )
END )
WHEN (SELECT edition
FROM clients.dbo.service
WHERE serv_id = hdr.serv_id) = 'WhosWho' THEN (
CASE
WHEN hdr.giftcarddiscount = 1 THEN 'GCDisc'
ELSE( CASE
WHEN si.itmclass = 'Distrib' THEN 'Y-Disc'
WHEN si.itmclass = 'PremIR' THEN '0Y' + '-Disc'
WHEN si.itmclass = 'InstResp' THEN '5Y' + '-Disc'
ELSE ''
END )
END )
WHEN (SELECT edition
FROM clients.dbo.service
WHERE serv_id = hdr.serv_id) = 'Catholic' THEN (
CASE
WHEN hdr.giftcarddiscount = 1 THEN 'GCDisc'
ELSE( CASE
WHEN si.itmclass = 'Distrib' THEN 'J-Disc'
WHEN si.itmclass = 'PremIR' THEN '0J' + '-Disc'
WHEN si.itmclass = 'InstResp' THEN '5J' + '-Disc'
ELSE ''
END )
END )
WHEN (SELECT edition
FROM clients.dbo.service
WHERE serv_id = hdr.serv_id) = 'Conservative' THEN (
CASE
WHEN hdr.giftcarddiscount = 1 THEN 'GCDisc'
ELSE( CASE
WHEN si.itmclass = 'Distrib' THEN 'B-Disc'
WHEN si.itmclass = 'PremIR' THEN '0B' + '-Disc'
WHEN si.itmclass = 'InstResp' THEN '5B' + '-Disc'
ELSE ''
END )
END )
ELSE ( CASE
WHEN hdr.giftcarddiscount = 1 THEN 'GCDisc'
ELSE( CASE
WHEN si.itmclass = 'Distrib' THEN 'H-Disc'
WHEN si.itmclass = 'PremIR' THEN '0H' + '-Disc'
WHEN si.itmclass = 'InstResp' THEN '5H' + '-Disc'
ELSE ''
END )
END )
END ) AS EditionItemCode
You have a number of redundant subqueries in your case statement that I don’t think need to be there. If I understand your tables and queries correct, you should be able to do the following instead. Note I have pulled out the first case statement (
Editioncolumn) into a derived-table join, then reference it from the second case statement to makeEditionItemCode.