SQL:如何区分某个字段中具有相同值的不同行,并对另一个字段应用单独的函数

SQL:如何区分某个字段中具有相同值的不同行,并对另一个字段应用单独的函数,sql,sql-server,Sql,Sql Server,我有一个显示订单列表的查询输出。如果某些订单由子订单组成,则这些订单可能在查询输出中占据多条记录。每个子订单在输出中占据单独的一行。OrderID列对于输出中的所有子订单具有相同的值: OrderID Sub-Order Price 1 1 100 1 2 50 2 1 30 3 1 50 我需要在输出中添加一列“折扣”,并按照

我有一个显示订单列表的查询输出。如果某些订单由子订单组成,则这些订单可能在查询输出中占据多条记录。每个子订单在输出中占据单独的一行。OrderID列对于输出中的所有子订单具有相同的值:

OrderID    Sub-Order  Price
1             1         100
1             2         50
2             1         30
3             1         50
我需要在输出中添加一列“折扣”,并按照以下规则填充:

  • 如果某订单有一个子订单,折扣为价格的10%
  • 如果某订单有多个子订单,则所有子订单的折扣为20%
  • 我的查询是两个选择的并集


    我将mssql与ms sql studio一起使用

    使用
    CASE
    COUNT
    窗口函数

    SELECT OrderID, Sub-Order, Price,
         CASE WHEN (count(*) OVER (PARTITION BY OrderID)) > 1 
              THEN Price * 0.8
              ELSE Price * 0.9
         END
    FROM ( table or <query> )
    
    选择订单ID、子订单、价格、,
    (按医嘱ID划分)上的(计数(*)大于1时的情况
    然后价格*0.8
    其他价格*0.9
    结束
    从(桌子或桌子)
    
    @一匹没有名字的马谢谢你的编辑。请问您使用了什么标记?当您在编辑问题时单击右上角的帮助图标(问号)时,您将被带到这里:这解释了所有听起来很有希望的内容,请尝试。如果我的查询是两个查询的并集,这可以应用吗?@LouisShraga您的意思可能是,如果
    table
    是两个查询的并集,您是否可以使用这种方法。当然可以,您只需将
    替换为
    ()表