Требуется помощь в работе с кейсом - PullRequest
0 голосов
/ 06 ноября 2011

У меня есть четыре стола. Я назову их 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 не создается. Если строки не имеют CA, MD или IL в D.State, тогда вся строка должна отображаться как обычно без звездочек. Я пробовал несколько циклов, и я не могу понять это правильно. Если у кого-то есть мысли, я был бы признателен.

Ответы [ 2 ]

3 голосов
/ 06 ноября 2011

Было бы проще написать это как объединение.

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 голос
/ 06 ноября 2011

Вы должны поместить логику в каждом столбце:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...