Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Stuck on this union / except
- transaction_id(pk) decision_id(pk) accepted_ind
- A 1 NULL
- A 2 <blank>
- A 4 Y
- B 1 <blank>
- B 2 Y
- C 1 Y
- D 1 N
- D 2 O
- D 3 Y
- SELECT Transaction_id, Decision_ID, Accepted_id
- FROM MyTable t
- WHERE Accepted_ind = 'Y'
- OR (NOT EXISTS (SELECT 1 FROM MyTable t2
- WHERE Accepted_ind = 'Y'
- and t2.Transaction_id = t.transaction_id)
- AND Decision_id = 1)
- DECLARE @t TABLE (
- transaction_id NCHAR(1),
- decision_id INT,
- accepted_ind NCHAR(1) NULL
- )
- INSERT @t VALUES
- ( 'A' , 1 , NULL ),
- ( 'A' , 2 , '' ),
- ( 'A' , 4 , 'Y' ),
- ( 'B' , 1 , '' ),
- ( 'B' , 2 , 'N' ), -- change from your sample data
- ( 'C' , 1 , 'Y' ),
- ( 'D' , 1 , 'N' ),
- ( 'D' , 2 , 'O' ),
- ( 'D' , 3 , 'Y' )
- SELECT transaction_id, decision_id, accepted_ind FROM (
- SELECT transaction_id, decision_id, accepted_ind,
- ROW_NUMBER() OVER (
- PARTITION BY transaction_id
- ORDER BY
- CASE
- WHEN accepted_ind = 'Y' THEN 1
- WHEN decision_id = 1 THEN 2
- ELSE 3
- END
- ) rn
- FROM @t
- ) Raw
- WHERE rn = 1
- transaction_id decision_id accepted_ind
- -------------- ----------- ------------
- A 4 Y
- B 1
- C 1 Y
- D 3 Y
- SELECT CASE
- WHEN accepteddecision.transaction_id IS NOT NULL THEN
- accepteddecision.transaction_id
- ELSE firstdecision.transaction_id
- END AS transaction_id,
- CASE
- WHEN accepteddecision.decision_id IS NOT NULL THEN
- accepteddecision.decision_id
- ELSE firstdecision.decision_id
- END AS decision_id,
- CASE
- WHEN accepteddecision.accepted_ind IS NOT NULL THEN
- accepteddecision.accepted_ind
- ELSE firstdecision.accepted_ind
- END AS accepted_ind
- FROM decision
- LEFT OUTER JOIN (SELECT *
- FROM decision AS accepteddecision
- WHERE accepteddecision.accepted_ind = 'Y') AS
- accepteddecision
- ON accepteddecision.transaction_id = decision.transaction_id
- LEFT OUTER JOIN (SELECT *
- FROM decision AS firstdecision
- WHERE firstdecision.decision_id = 1) AS firstdecision
- ON firstdecision.transaction_id = decision.transaction_id
- GROUP BY accepteddecision.transaction_id,
- firstdecision.transaction_id,
- accepteddecision.decision_id,
- firstdecision.decision_id,
- accepteddecision.accepted_ind,
- firstdecision.accepted_ind
- WITH T AS (SELECT * FROM (
- VALUES ('A', 1, NULL),
- ('A', 2, ''),
- ('A', 4, 'Y'),
- ('B', 1, ''),
- ('B', 2, 'Y'),
- ('C', 1, 'Y'),
- ('D', 1, 'N'),
- ('D', 2, 'O'),
- ('D', 3, 'Y'),
- ('E', 2, 'O'), -- smaple data extended
- ('E', 1, 'N') -- smaple data extended
- ) AS T (transaction_id, decision_id, accepted_ind)
- )
- SELECT *
- FROM T
- WHERE accepted_ind = 'Y'
- UNION
- SELECT T.*
- FROM (
- SELECT transaction_id
- FROM T
- WHERE decision_id = 1
- EXCEPT
- SELECT transaction_id
- FROM T
- WHERE accepted_ind = 'Y'
- ) D
- JOIN T
- ON T.transaction_id = D.transaction_id
- AND T.decision_id = 1;
Add Comment
Please, Sign In to add comment