2015-11-04 53 views
0

我想從表B中獲取位置ID的最頻繁的Zip_Code。表A(事務)每個事務有一個A.zip_code,但表B(位置)有一個區域或城市的多個Zip_code。我正在嘗試使用兩個表中都存在的Location_D來獲取帳號中最頻繁的B.Zip_Code。爲了便於理解,我簡化了代碼並更改了列的名稱,但這是我迄今爲止查詢的邏輯。任何幫助,將不勝感激。提前致謝。如何在select語句中查找最頻繁的值作爲子查詢?

Select 
      A.Account_Number, 
      A.Utility_Type, 
      A.Sum(usage), 
      A.Sum(Cost), 
      A.Zip_Code, 
      (select B.zip_Code from B where A.Location_ID= B.Location_ID having count(*)= max(count(B.Zip_Code)) as Location_Zip_Code, 
      A.Transaction_Date 


From 
      Transaction_Table as A Left Join 
      Location Table as B On A.Location_ID= B.Location_ID 


Group By 
       A.Account_Number, 
       A.Utility_Type, 
       A.Zip_Code, 
       A.Transaction_Date 
+0

您當前查詢的結果有什麼問題?你得到了什麼結果,你想得到什麼? –

+0

即時消息只與我的查詢獲得「消息116,級別16,狀態1,行35 只有一個表達式可以在子查詢沒有引入EXISTS時在選擇列表中指定。 – user5511576

回答

1

這就是我想出:

Select tt.Account_Number, tt.Utility_Type, Sum(tt.usage), Sum(tt.Cost), 
     tt.Zip_Code, 
     (select TOP 1 l.zip_Code 
     Location_Table l 
     where tt.Location_ID = l.Location_ID 
     group by l.zip_code 
     order by count(*) desc 
     ) as Location_Zip_Code, 
     tt.Transaction_Date 
From Transaction_Table tt 
Group By tt.Account_Number, tt.Utility_Type, tt.Zip_Code, tt.Transaction_Date; 

注:

  • 表的別名是一件好事。但是,它們應該是引用表的縮寫,而不是任意字母。
  • 表別名限定列名稱,而不是函數。因此sum(tt.usage)而不是tt.sum(usage)
  • 在外部查詢中不需要連接。您正在完成子查詢中的所有工作。
  • order bytop似乎是獲得最常見的郵政編碼(順便說一句,統計模式)的方式。
+0

謝謝,它幫助了我!和有關別名:|因爲我正在更改列名稱並添加別名來簡化它,只是沒有注意到我沒有遵循正確的方式。但謝謝你的提示! :) – user5511576