HI Gurus, Я ищу, чтобы заменить предложение IN существующим, но, несмотря на чтение других подобных случаев, я не смог применить их к своему набору данных.Замена В разделе существует
Ищу добавить колонку к моему основному запросу, который говорит мне, что если фонд находится в отдельном списке, и если он затем маркировать его «аварийный», а если нет, то «нечрезвычайные»
список определяется следующим образом:
select
f.id
FROM _audit a
INNER JOIN _fund f ON a.article_id = f.id
WHERE a.entity_name = 'Fund'
AND a.Changes LIKE
'%finance_code2%OldValue>3%'
)
UNION
(
select
id AS fund_reference
FROM _fund
WHERE (finance_code2 LIKE '3%'
OR finance_code2 LIKE '9%')
AND finance_code2 IS NOT NULL
И вот что я ищу, в основном что-то вроде:
SELECT
...Main query here...
,CASE WHEN fund_id IN (list_details) THEN 'emergency' else 'non-emergency' end
Я знаю, что это было бы более эффективным, чтобы сделать что-то как
SELECT
...Main query here...
,SELECT CASE WHEN EXISTS
(SELECT fund_id FROM list_details WHERE fund_id IS NOT NULL) THEN 'emergency' else 'non-emergency' END
Но каждый раз, когда я пытаюсь это постоянно возвращается ложные ценности (о том, что средства, содержащиеся в списке, когда они не являются)
В случае это помогает, я использую SQL Server 2005 и главный запрос приведена ниже, где list_details результат (ID) присоединяется на donation_fund_allocation на list_details.id = donation_fund_allocation.fund_id
Как всегда любая подсказка будет массово оценили :) спасибо!
Главного запрос
SELECT
don.supporter_id AS contact_id
,don.id AS gift_id
,YEAR(don.date_received) AS calendar_year
,YEAR(don.date_received) - CASE WHEN MONTH(don.date_received) < 4 THEN 1 ELSE 0 END AS financial_year
,don.date_received AS date_received
,don.event_id AS event_id
,SUM(CASE WHEN don.gift_aid_status <> 4 THEN don.value_gross * ((dfa.percentage)/100)
WHEN don.gift_aid_status = 4 AND don.value_net > don.value_gross
AND don.value_net <> 0 THEN don.value_net * ((dfa.percentage)/100)
ELSE don.value_gross * ((dfa.percentage)/100)
END
) AS donation_value
--**List details query to go in here**
FROM donation don WITH (nolock)
INNER JOIN donation_fund_allocation dfa WITH (nolock) ON dfa.donation_id = don.id
WHERE don.supporter_id IS NOT NULL
AND don.status = 4
AND don.value_gross <> 0
GROUP BY don.supporter_id
,don.id
,don.date_received
,don.event_id
Просто примечание стороны: с простым предикатом равенства 'IN' и' EXISTS' имеют ту же эффективность в 'SQL Server' и дают те же планы. – Quassnoi