我的查询在我的仓库和商店中过滤了我的表格中的正库存。
我只需要取正值,如果其中一个值为正值,我只取这个值。
WITH Resultat AS
(
SELECT AR_Ref,StockDepots,StockStores,
CASE
WHEN StockDepots > 0 AND StockStores > 0 THEN StockDepots + StockStores
WHEN StockDepots > 0 THEN StockDepots
WHEN StockStores > 0 THEN StockStores
ELSE StockDepots + StockStores
END AS StockMulti
FROM ArticleStock
)
SELECT * FROM Resultat
WHERE StockMulti > 0
ORDER BY AR_Ref
小提琴:http://rextester.com/RMSU6120
我的查询结果还可以,我需要知道如何在没有" WITH"的情况下简化此查询。或子查询?
编辑**
为什么我不需要WITH或SubQuery是因为我认为在这种情况下是过度的,我认为可以在没有WITH或子查询的情况下进行此查询。
答案 0 :(得分:1)
CTE或子选择有什么问题?
以下是一些方法,应该是等效的:
- 使用CROSS APPLY
SELECT AR_Ref,StockDepots,StockStores
,ca.StockMulti
FROM ArticleStock
CROSS APPLY(SELECT CASE
WHEN StockDepots > 0 AND StockStores > 0 THEN StockDepots + StockStores
WHEN StockDepots > 0 THEN StockDepots
WHEN StockStores > 0 THEN StockStores
ELSE StockDepots + StockStores END) AS ca(StockMulti)
WHERE StockMulti > 0
ORDER BY AR_Ref;
- CASE
SELECT AR_Ref,StockDepots,StockStores
,CASE
WHEN StockDepots > 0 AND StockStores > 0 THEN StockDepots + StockStores
WHEN StockDepots > 0 THEN StockDepots
WHEN StockStores > 0 THEN StockStores
ELSE StockDepots + StockStores END AS StockMulti
FROM ArticleStock
WHERE CASE
WHEN StockDepots > 0 AND StockStores > 0 THEN StockDepots + StockStores
WHEN StockDepots > 0 THEN StockDepots
WHEN StockStores > 0 THEN StockStores
ELSE StockDepots + StockStores END > 0
ORDER BY AR_Ref;
- 如果我做对了,那么检查WHERE StockStores > 0 OR StockDepots > 0
SELECT AR_Ref,StockDepots,StockStores
,CASE
WHEN StockDepots > 0 AND StockStores > 0 THEN StockDepots + StockStores
WHEN StockDepots > 0 THEN StockDepots
WHEN StockStores > 0 THEN StockStores
ELSE StockDepots + StockStores END AS StockMulti
FROM ArticleStock
WHERE StockStores > 0 OR StockDepots > 0
ORDER BY AR_Ref;
答案 1 :(得分:0)
嗯,你可以这样做:
SELECT AR_Ref,StockDepots,StockStores,
CASE
WHEN StockDepots > 0 AND StockStores > 0 THEN StockDepots + StockStores
WHEN StockDepots > 0 THEN StockDepots
WHEN StockStores > 0 THEN StockStores
END AS StockMulti
FROM ArticleStock
WHERE StockDepots > 0 or StockStores > 0
ORDER BY AR_Ref
请注意,原始case语句中的“else”永远不会被执行,因为您只使用其中一个值为>的行。我删除了它,因为它可能引起混淆。
答案 2 :(得分:0)
您可以直接在where where条件中使用:
SELECT AR_Ref,StockDepots,StockStores,
CASE
WHEN StockDepots > 0 AND StockStores > 0 THEN StockDepots + StockStores
WHEN StockDepots > 0 THEN StockDepots
WHEN StockStores > 0 THEN StockStores
ELSE StockDepots + StockStores
END AS StockMulti
FROM ArticleStock
where (CASE
WHEN StockDepots > 0 AND StockStores > 0 THEN StockDepots + StockStores
WHEN StockDepots > 0 THEN StockDepots
WHEN StockStores > 0 THEN StockStores
ELSE StockDepots + StockStores
END) > 0
order by AR_Ref
答案 3 :(得分:0)
您可以将数据推送到history.replaceState()
,然后以简单的方式使用该表。
Temp Table
答案 4 :(得分:-1)
试试这个:
SELECT * FROM
(
SELECT AR_Ref,StockDepots,StockStores,
CASE
WHEN StockDepots > 0 AND StockStores > 0 THEN StockDepots + StockStores
WHEN StockDepots > 0 THEN StockDepots
WHEN StockStores > 0 THEN StockStores
ELSE StockDepots + StockStores
END AS StockMulti
FROM ArticleStock
)
Resultat
WHERE StockMulti > 0
ORDER BY AR_Ref