如何避免在更新中使用GROUP BY或DISTINCT

问题描述 投票:0回答:1

我有这样的桌子

    A   B   C   D   E   F
00002471    Sd3a28d471  0   24.00   377.500000  1
00002471    Sd3a28d471  0   353.50  377.500000  1
00002471    Sd3a28d471  1   211.00  211.000000  1

00002471    Sd3a28e471  1   343.00  343.000000  1
00002471    Sd3a28e471  0   56.00   242.370000  1
00002471    Sd3a28e471  0   177.06  242.370000  1
00002471    Sd3a28e471  0   9.31    242.370000  1

通过对A,B和C列进行分组,我需要检查哪一个在E中具有最低的值,并将F列的最低值行更新为1,其余的列更新为0。同样,我需要将F列更新为1,其中C为1。我需要的输出如下

    A   B   C   D   E   F
00002471    Sd3a28d471  0   24.00   377.500000  0
00002471    Sd3a28d471  0   353.50  377.500000  0
00002471    Sd3a28d471  1   211.00  211.000000  1

00002471    Sd3a28e471  1   343.00  343.000000  0
00002471    Sd3a28e471  0   56.00   242.370000  1
00002471    Sd3a28e471  0   177.06  242.370000  1
00002471    Sd3a28e471  0   9.31    242.370000  1

我在下面的查询中尝试过此方法

UPDATE T1
SET T1.F = CASE WHEN T1.E <= T2.E THEN 1 ELSE 0 END
--select t2.*
FROM
(SELECT DISTINCT A,B,C,D,E,F FROM #SalesOrder WHERE E IS NOT NULL) T1 
INNER JOIN 
(SELECT DISTINCT A,B,C,D,E,F FROM #SalesOrder WHERE E IS NOT NULL) T2                           
ON  T1.A    = T2.A
AND T1.B    = T2.B
--AND T1.C  = T2.C
WHERE T1.C = 1 AND T2.C = 0

但是此查询引发错误

错误消息Msg 4418,第16级,状态1,行265派生表“ T1”不可更新,因为它包含聚合,DISTINCT或GROUP BY子句或PIVOT或UNPIVOT运算符。

@ Suresh Gajera我需要取不同的值A,B,C和E,取不同的值后,它将像这样]

A   B   C   E
00002471    Sd3a28d471  0   377.500000
00002471    Sd3a28d471  1   211.000000
00002471    Sd3a28e471  0   242.370000
00002471    Sd3a28e471  1   0.000000

此后,我需要基于C列比较E的值,在此,与第一行相比,第二行是最低的,因此第二行应为1,第一行应为0 ...以同样的方式第三第四行应该更新。

我有这样的表格A B C D E F 00002471 Sd3a28d471 0 24.00 377.500000 1 00002471 Sd3a28d471 0 353.50 377.500000 1 00002471 Sd3a28d471 1 211.00 211.000000 ...

sql sql-server azure-sql-server
1个回答
0
投票

仅当您按A和B(无C)分组时,您的预期结果才有意义。在这种情况下:

© www.soinside.com 2019 - 2024. All rights reserved.