需要案例功能协助

时间:2011-11-06 01:25:09

标签: sql oracle case

我有四张桌子。我叫他们A-D。

SELECT A.ID, B.FirstName, B.LastName, C.Desc, A.Qty, A.Price, D.State,
A.Qty * A.Price AS "Total Price",
CASE D.State
when 'CA' then '***'
when 'MD' then '***'
when 'IL' then '***'
Else D.State
END
FROM A, B, C, D;

上面的SELECT语句显示所有这些数据,当状态为CA,MD或IL时,它会列出一个名为CASE的新列,并显示三个星号。

我需要得到它,以便每当D.State是CA,MD或IL时,A.Qty,A.Price和Total Price计算都用三个星号填充,以隐藏数据和没有创建额外的CASE列。如果行在D.State中没有CA,MD或IL,那么整行需要显示为正常而没有星号。我尝试了几个循环,我似乎无法正确。如果有人有任何想法,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

将此作为联盟写起来会更容易。

SELECT A.ID, B.FirstName, B.LastName, C.Desc, A.Qty, A.Price, D.State, D.Qty * D.Price AS "Total Price", D.State
FROM A, B, C, D
WHERE D.State NOT IN ('CA', 'MD', 'IL')
UNION ALL
SELECT '****' AS ID, '****' AS FirstName, '****' AS LastName, '****' AS Desc, '****' AS Qty, A.Price, '****' AS State, '****' AS  AS "Total Price", D.State
FROM A, B, C, D
WHERE D.State IN ('CA', 'MD', 'IL')

顺便说一下,你错过了加入标准。

答案 1 :(得分:1)

您需要在每列上放置案例逻辑:

SELECT A.ID, B.FirstName, B.LastName, C.Desc,
case D.State when 'CA' then '***' when 'MD' then '***' when 'IL' then *** else A.Qty end, 
case D.State when 'CA' then '***' when 'MD' then '***' when 'IL' then *** else A.Price end, 
D.State,
case D.State when 'CA' then '***' when 'MD' then '***' when 'IL' then *** else D.Qty * D.Price end AS "Total Price",
CASE D.State
when 'CA' then '***'
when 'MD' then '***'
when 'IL' then '***'
Else D.State
END
FROM A, B, C, D;