SQL组由于嵌套选择困难

时间:2016-04-18 14:41:26

标签: sql sql-server tsql

我遇到了SELECT的问题,我必须通过Mail进行分组,以便我可以通过邮件发送结果。

我有这样的数据:

-------------------------
ArtNr|Status|  Date       |Mail             |Comment
  2     20    22.01.16     test1@mail.com    comment1
  3     20    23.01.16     test3@mail.com    comment2
  26    20    19.01.16     test2@mail.com    comment3
  25    20    05.01.16     test1@mail.com    comment3

我需要通过邮件对此进行分组,以便我可以将数据仅发送到与其相关的数据。

这就是我现在所拥有的:

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

但这显然不会起作用,因为我没有聚合。我无法对此进行求和/计数或最大化,因为我需要两个数据集,但只发送到一个邮件地址。

可能我只是在树前看不见木头。

2 个答案:

答案 0 :(得分:1)

GROUP BY仅适用于您尝试从数据中提取聚合的情况,正如您所说的那样。

如何最好地满足此要求实际上取决于目标应用程序如何处理数据。选项包括 -

  • 使用LINQ或类似方法过滤数据客户端以提取邮件的不同值列表,然后通过它们迭代选择所有匹配的记录。
  • 在查询中按邮件对记录进行排序,如果邮件与上一条记录的邮件不匹配,则使代码开始新邮件
  • 使用ROW_NUMBER()添加PARTITION BY Mail字段,并在显示1时开始新邮件。

还有更多选择;什么是正确的方式取决于你最终如何使用数据。但是到目前为止你所说的答案并没有在你的SQL中包含GROUP BY子句。

答案 1 :(得分:1)

这是一些伪代码......

  1. 获取唯一的电子邮件地址列表。
  2. 对于每个唯一的电子邮件地址,请获取要发送的行
  3. 发送电子邮件
  4. 你明白了: - )

    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