[英]SQL - Should I add an IF or CASE to this WHERE clause?
I've written a query that looks like this: 我写了一个查询,看起来像这样:
SELECT
xx.DATE
xx.TRANSACTION_ID
xx.ID
xx.CODE
FROM TABLE_X xx
WHERE
xx.DATE >= TO_DATE('2015-01-01', 'YYYY-MM-DD')
AND xx.ID IN
(SELECT
yy.id
FROM TABLE_Y yy
WHERE
yy.status = 'OPEN'
AND yy.type = 1
AND trunc(yy.date) = TO_DATE('{FREE_FORM}', 'YYYY-MM-DD')
)
ex.TABLE_X 例如TABLE_X
DATE TRANSACTION_ID ID CODE
1/1/2015 1020 CAT RED
1/1/2015 1010 CAT GREEN
1/2/2015 2020 DOG RED
1/2/2015 2010 DOG GREEN
1/3/2015 3030 RABBIT BLUE
1/3/2015 3020 SPIDER RED
1/3/2015 3010 RABBIT GREEN
1/4/2015 4020 CAT RED
1/4/2015 4010 SNAKE GREEN
1/4/2015 4000 MONKEY ORANGE
1/5/2015 5020 HORSE RED
1/5/2015 5010 COW GREEN
ex.TABLE_Y 例如:TABLE_Y
date id status type
1/1/2015 CAT OPEN 1
1/2/2015 DOG OPEN 1
1/3/2015 RABBIT OPEN 1
With these example tables my current output is: 使用这些示例表,我当前的输出是:
ex.output 输出
DATE TRANSACTION_ID ID CODE
1/1/2015 1020 CAT RED
1/1/2015 1010 CAT GREEN
1/2/2015 2020 DOG RED
1/2/2015 2010 DOG GREEN
1/3/2015 3030 RABBIT BLUE
1/3/2015 3010 RABBIT GREEN
1/4/2015 4020 CAT RED
I'd like to add something to maybe the WHERE clause like: 我想在WHERE子句中添加一些内容,例如:
if (ex.output.CODE = RED){
SELECT
xx.DATE
xx.TRANSACTION_ID
xx.ID
xx.CODE
FROM TABLE_X xx
WHERE xx.TRANSACTION_ID = ex.output.TRANSACTION_ID - 10
}
AND
if (ex.output.CODE = GREEN){
SELECT
xx.DATE
xx.TRANSACTION_ID
xx.ID
xx.CODE
FROM TABLE_X xx
WHERE xx.TRANSACTION_ID = ex.output.TRANSACTION_ID + 10
}
My goal is to end up with an output of: 我的目标是最终得到以下输出:
DATE TRANSACTION_ID ID CODE
1/1/2015 1020 CAT RED
1/1/2015 1010 CAT GREEN
1/2/2015 2020 DOG RED
1/2/2015 2010 DOG GREEN
1/3/2015 3030 RABBIT BLUE
1/3/2015 3020 SPIDER RED
1/3/2015 3010 RABBIT GREEN
1/4/2015 4020 CAT RED
1/4/2015 4010 SNAKE GREEN
Is this possible? 这可能吗?
Try this query (written in MS T-SQL) 尝试此查询(用MS T-SQL编写)
WITH CTE
AS ( SELECT xx.DATE ,
xx.TRANSACTION_ID ,
xx.ID ,
xx.CODE
FROM TABLE_X xx
WHERE xx.DATE >= '2015-01-01'
AND xx.ID IN ( SELECT yy.id
FROM TABLE_Y yy
WHERE yy.status = 'OPEN'
AND yy.type = 1 )
)
SELECT *
FROM CTE
UNION
SELECT xx.*
FROM TABLE_X xx
JOIN CTE ON xx.Transaction_ID = CTE.Transaction_ID - 10
AND CTE.Code = 'RED'
UNION
SELECT xx.*
FROM TABLE_X xx
JOIN CTE ON xx.Transaction_ID = CTE.Transaction_ID + 10
AND CTE.Code = 'GREEN'
ORDER BY Date ,
ID;
The above query will provide an output of 上面的查询将提供输出
If I understood your request correct then the last line for the ID='CAT'
( 1/4/2015,4020,CAT,RED
) should not be in your final output. 如果我理解您的请求正确,那么ID='CAT'
的最后一行( 1/4/2015,4020,CAT,RED
)不应出现在最终输出中。 You do not get a calculated TRANSACTION_ID
of 4020 anywhere in ex.output . 在ex.output的任何地方都不会得到4020的计算出的TRANSACTION_ID
。
I would build the query like this: 我会建立这样的查询:
SELECT
xx.DATE,
xx.TRANSACTION_ID,
xx.ID,
xx.CODE
FROM TABLE_X xx
WHERE TRANSACTION_ID IN
(SELECT CASE eo.CODE WHEN 'RED' THEN TRANSACTION_ID-10 WHEN 'GREEN' THEN TRANSACTION_ID+10 ELSE TRANSACTION_ID END as trx_id
FROM ex.output eo)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.