【问题标题】:An aggregate may not appear in the set list of an UPDATE statement Error with randomized set value聚合可能不会出现在 UPDATE 语句的集合列表中 随机设置值错误
【发布时间】:2014-03-21 14:26:31
【问题描述】:

我正在尝试通过 Management Studio 执行此 SQL 脚本,但出现此错误: 聚合可能不会出现在 UPDATE 语句的集合列表中。我尝试了其他一些陈述,但我找不到随机设定值的任何解决方案。非常感谢您的帮助!

UPDATE G SET G.SAAT = DATEADD(d, ROUND(DATEDIFF(d, DATEADD(hh,2, MIN(G2.SAAT)),
DATEADD(dd,6, T.CIKIS_TARIHI)) * RAND(CHECKSUM(NEWID())), 0),DATEADD(second,CHECKSUM(NEWID())%48000, G2.SAAT))
FROM GONDERI_HAREKET G
INNER JOIN GONDERI_HAREKET G2 ON G2.TAKIP_NO = G.TAKIP_NO
INNER JOIN TESLIM_FORMU T ON G.TAKIP_NO = T.TAKIP_NO
WHERE G.ISLEM_KODU = 15
AND G2.ISLEM_KODU = 10
AND G.SAAT < G2.SAAT
AND YEAR(T.CIKIS_TARIHI) = 2014
AND (MONTH(T.CIKIS_TARIHI) = 1 OR MONTH(T.CIKIS_TARIHI) = 2)
AND T.MUSTERI_KODU = 2483

【问题讨论】:

  • 您需要在set 语句中编写不带min(g2.saat) 的查询。您也许可以在 from 子句中使用子查询来获得所需的内容。

标签: sql sql-server tsql sql-server-2005


【解决方案1】:

试试这个... 您可以使用 CTE 来获取 MIN val

WITH MIN_G2 as
(SELECT MIN(SAAT) SAAT
, TAKIP_NO
FROM GONDERI_HAREKET
GROUP BY TAKIP_NO
)
UPDATE G SET G.SAAT = DATEADD(d, ROUND(DATEDIFF(d, DATEADD(hh,2, MIN_G2.SAAT),
DATEADD(dd,6, T.CIKIS_TARIHI)) * RAND(CHECKSUM(NEWID())), 0),DATEADD(second,CHECKSUM(NEWID())%48000, G2.SAAT))
FROM GONDERI_HAREKET G
INNER JOIN GONDERI_HAREKET G2 ON G2.TAKIP_NO = G.TAKIP_NO
INNER JOIN MIN_G2 on G2.TAKIP_NO = MIN_G2.TAKIP_NO
INNER JOIN TESLIM_FORMU T ON G.TAKIP_NO = T.TAKIP_NO
WHERE G.ISLEM_KODU = 15
AND G2.ISLEM_KODU = 10
AND G.SAAT < G2.SAAT
AND YEAR(T.CIKIS_TARIHI) = 2014
AND (MONTH(T.CIKIS_TARIHI) = 1 OR MONTH(T.CIKIS_TARIHI) = 2)
AND T.MUSTERI_KODU = 2483

【讨论】:

  • 现在,它显示“无法绑定多部分标识符“G2.SAAT”。”
  • 更新了查询,放错了别名。立即尝试。
  • 这就是答案! :) 非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多