根据GROUP BY子句设置新列的值

时间:2014-05-07 17:07:05

标签: sql

我在下面提到了SQL要求。我已经能够为1st& amp;第二要求。但是,我的主要要求是第3点。而且,我只需要第3个帮助。

要求: -

  1. (完成)产品应按其“评论”栏的值进行分组。
  2. (完成)获取每组相同评论下的产品总数。
  3. (需要建议)根据“IsApproved”列中的值,应该有一个新列 - “Group_Approval”。

    • 如果任何产品(在同一组注释下)有(位列)“IsApproved”= 0,则更新“Group_Approval”= 0.否则更新“Group_Approval”= 1。
  4. 排除第3点, 当前查询: -

    SELECT P.ProductID, COUNT(P.ProductID), PA.Comment, P.IsApproved
    FROM
        Products P 
        INNER JOIN ProductApproval PA ON P.ProductID = PA.ProductID
    WHERE
        P.ProductID = '123456'
    GROUP BY
        P.ProductID, PA.Comment, P.IsApproved
    

    当前结果: -

    ProductID   Total_Count_Same_Commented_Product       Comment           IsApproved
    
    12345                 1                      Use it after 2 months.        0
    12345                 1                      Cannot be used till 2020.     1
    12345                 1                      Use it after 2 months.        1
    

    根据第3个要求,下面提到的是我真正想要的。 必填结果: -

    ProductID   Total_Count_Same_Commented_Product       Comment        Group_Approval
    
    12345                 2                      Use it after 2 months.        0
    12345                 1                      Cannot be used till 2020.     1
    

1 个答案:

答案 0 :(得分:1)

SELECT P.ProductID, COUNT(P.ProductID), PA.Comment, MIN(P.IsApproved)
FROM
    Products P 
INNER JOIN ProductApproval PA ON P.ProductID = PA.ProductID
WHERE
    P.ProductID = '123456'
GROUP BY
    P.ProductID, PA.Comment

如果IsApproved只能是0或1,那么应该做你想要的。如果它可以是一系列值,那么你可以在MIN函数中放入一个CASE语句并根据需要设置值。

相关问题