2016-04-18 26 views
1

我得到了一個SELECT的問題,我必須通過Mail進行分組,以便通過郵件發送結果。通過嵌套選擇困難的SQL組

我的數據是這樣的:

------------------------- 
ArtNr|Status| Date  |Mail    |Comment 
    2  20 22.01.16  [email protected] comment1 
    3  20 23.01.16  [email protected] comment2 
    26 20 19.01.16  [email protected] comment3 
    25 20 05.01.16  [email protected] comment3 

我需要這組通過郵件,這樣我可以將數據發送到僅由它有關的人。

這我有什麼至今:

SELECT ArtNr, [Status], Date, Mail, Comment 
From dbmail 
Group by Mail 

但是,這顯然是行不通的,因爲我有它不需要聚集。我不能總結/計數或最大,因爲我需要這兩個數據集,但只發送到一個郵件地址。

這可能是因爲我不會在樹前看到木頭。

+2

什麼是你需要的結果呢?也許只是row_number()爲郵件獲取指標,當它改變? –

+0

或使用'訂購郵件' –

+0

我需要ArtNr狀態日期和評論一切regaarding一個郵件 - 地址 – Soulrox

回答

1

下面是一些僞代碼雜交...

  1. 獲取唯一的電子郵件地址列表。
  2. 對於每一個獨特的電子郵件地址發送一封行發送
  3. 寄送電子郵件

你的想法:-)

DECLARE @emailAddress NVARCHAR(50) 
DECLARE cur CURSOR FOR SELECT DISTINCT [email] FROM [table] FOR READONLY 
OPEN cur 
    FETCH NEXT FROM cur INTO @emailAddress WHILE @@FETCH_STATUS = 0 
     BEGIN 
      SELECT [somestuff] FROM [table] WHERE email = @emailAddress 

      SEND YOUR EMAIL /// 



     FETCH NEXT FROM cur INTO @emailAddress 
    END 
1

GROUP BY僅適用於您試圖從數據中提取聚合的情況,正如您所說的那樣。

如何最好地滿足這個要求,真的取決於你的目標應用程序如何處理數據。選項包括 -

  • 使用LINQ或類似方法過濾數據客戶端以回收郵件的不同值列表,然後遍歷它們選擇所有匹配的記錄。
  • 排序按郵件中的記錄查詢,並使得代碼開始一個新的郵件,如果郵件不匹配,對於此前的紀錄
  • 添加ROW_NUMBER()PARTITION BY Mail並啓動新郵件時,顯示1。

還有很多可用選項;什麼是正確的方式取決於你最終如何使用數據。但是到目前爲止你所說的答案不包括SQL中的GROUP BY子句。

+0

將嘗試與ROW_NUMBER()併發布,如果它的工作感謝您的建議。 – Soulrox