2014-12-09 43 views
1

是否可以根據大小寫聲明一個局部變量,然後觸發一個通用的子查詢?如何使用case語句爲後續子查詢聲明局部變量?

僞代碼:

SELECT 
    CASE 
     WHEN TABLE.TYPE = 'STUDENT' variable = "UNIVERSITY" 
     WHEN TABLE.TYPE = 'EMPLOYEE' variable = "EMPLOYER" 
    (Some big query here it has a common joins/groupings but the variable changes) 
    END AS NAME 
FROM TABLE 

尋找一個SQL Server的解決方案。

情景是這樣的 - 我有一個查詢列出了一些成員信息。現在我需要獲取一些現有查詢的附錄數據 - 我的意思是結果集不會改變。我實際上可以加入,但是我必須濾除很多東西 - 這有道理嗎?想象一下,我在桌上展示了所有成員,並且有人要求我展示大學名稱或僱主名稱。而最大的問題是一個會員可以有多個他參加的大學 - 與僱主相同。這種情況下加入性能不好?由於有很多一對多的東西。另外請注意,我最終只顯示10條記錄作爲分頁的一部分,所以我認爲我應該做一個案例聲明。

+0

「大查詢」是指多個記錄,但是你想把它分配給一個變量? – 2014-12-09 11:32:30

+0

「大查詢」不幸返回單個名稱:) – Nishant 2014-12-09 11:33:24

+0

動態SQL或CTE(WITH子句)可能是選項。 – Sruti 2014-12-09 11:34:17

回答

3
DECLARE @variable varchar(10) 

SELECT @variable = 
CASE 
    WHEN t.TYPE = 'STUDENT' THEN 'UNIVERSITY' 
    WHEN t.TYPE = 'EMPLOYEE' THEN 'EMPLOYER' 
    ELSE 'Undefined' 
END 
FROM TableName t 

MSDN - SELECT @local_variable

如果SELECT語句返回多個值,該變量 分配的最後一個返回值。

+0

我現在在哪裏放置子查詢?在案件陳述中還是在案件陳述之外? 「大查詢」是推導出該值的關鍵:) – Nishant 2014-12-09 11:42:01

+1

@Nishant:它屬於主查詢(位於'FROM ...'後面)而不是案件陳述。 – 2014-12-09 11:44:57