2016-11-16 328 views
0

我想找出創建查詢的最佳方法。訪問查詢設計 - 複雜標準?

比方說,我有兩個表

enter image description here

在查詢中,我希望[電信]值是 'IRT'。當[Co State] = [Lic State]時,我想要顯示[Line],但是在SC和TN有兩個不同的行條目的情況下,我只需要顯示'M'值。

樣品結果會是這樣: enter image description here

表數據僅僅是一個假的樣品。真實數據包括所有50個州,一些州(Lic State)會有一個值,少數會有兩個。

有沒有簡單的方法來創建這些結果與一個查詢,或者最好是創建一個查詢,省略'SC'和'TN'的[許可證州],和一個只包括'SC'和'TN'的[Line]爲'M',然後取兩個查詢的SQL並通過UNION加入它們?

+0

當兩個值存在時,SC和TN是唯一有特殊要求的狀態嗎?發佈數據而不是圖片總是最好的。 – Fionnuala

回答

0

我在移動設備上,只是爲了好玩,是的......這不是乾淨的bur這個想法就在那裏。

您需要使用group by,因爲每個狀態只需要一條記錄。

選擇第一個(載體),第一個(Costate),iif(count(line)> 1,「M」,第一個(line)) from(select costate from t2 where licstate =「irt」)left join t1 Costate = licstate group by costate

0

您需要使用Aggregate Functions。你可以彙總IIFs。因此,如果您按照CoState進行分組並對每個記錄計數爲1,那麼您可以對彙總值使用IIF,並在需要時返回M,否則將返回第一個值(因爲在您的問題中只會有一個值):

SELECT Tabelle2.Carrier, Tabelle2.CoState, IIf(Max(IIf([Tabelle1].[Line]="M",1,0))=1,"M",First([Tabelle1].[Line])) AS Line 
FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.LicState = Tabelle2.CoState 
GROUP BY Tabelle2.Carrier, Tabelle2.CoState 
HAVING (((Tabelle2.Carrier)="IRT")); 

所以它的三個步驟:內IIF還給1用於與M.每一個記錄聚集轉換,爲1的記錄應該回來與M和爲他人0 - 最後,外部IIF在聚合函數上工作並返回M或Line-Value。由於您正在分組,因此您還需要彙總該值 - 您使用FIRST-指令進行的操作。

+0

這兩個答案(Johanness和user6788933)都是爲我想做的事情而工作的。謝謝你的幫助! – CasWalker

+0

對於給定的數據,他們確實是這樣做的。 user6788933s解決方案使用了一個子查詢(SELECT FROM(SELECT ...)),如果您有其他可能性,我認爲您應該避免使用該子查詢,因爲它可能非常緩慢且耗費內存。如果使用計數(行),則只有在具有M列的成本中總是有第二列時才起作用。 – Johanness