我正在尝试更新SQL Server中的某些列,但我发现有一些GROUP BY
和having
条件。我已经使用了一些线索,这些线索在这里写了一些答案,但我无法解决它。有人可以帮我找一下我的SQL命令在哪里做错了吗?
感谢您的回答!
这就是我想要做的事情如果它适用于GROUP BY。
UPDATE T SET T.TES_TARIHI = G.TARIH FROM TESLIM_FORMU T
INNER JOIN GONDERI_HAREKET G ON T.TAKIP_NO = G.TAKIP_NO
INNER JOIN GONDERI_HAREKET G2 ON T.TAKIP_NO = G2.TAKIP_NO
WHERE T.MUSTERI_KODU = 2483 AND YEAR(T.CIKIS_TARIHI) = 2012 AND G.ISLEM_KODU = 15 AND G2.ISLEM_KODU IN (40,41,42,43,44,45,46,47,48,49,78) AND T.DURUMU = 1 AND T.ISLEM_KODU <> 77
GROUP BY T.TAKIP_NO, T.CIKIS_TARIHI, T.TES_TARIHI
HAVING (DATEDIFF(dd,MAX(G.TARIH), T.TES_TARIHI) >= 1)
我将代码更改为:
UPDATE T
SET T.TES_TARIHI = X.(MAX(TARIH))
FROM TESLIM_FORMU T
INNER JOIN
(SELECT TAKIP_NO, ISLEM_KODU, (TARIH)
FROM GONDERI_HAREKET
WHERE T.MUSTERI_KODU = 2483
AND YEAR(T.CIKIS_TARIHI) = 2012
AND G.ISLEM_KODU = 15
AND T.DURUMU = 1
AND T.ISLEM_KODU <> 77
GROUP BY T.TAKIP_NO,
T.CIKIS_TARIHI,
T.TES_TARIHI HAVING (DATEDIFF(dd,MAX(G.TARIH), T.TES_TARIHI) >= 1)) X ON X.TAKIP_NO = T.TAKIP_NO
我收到错误:
Msg 4104,Level 16,State 1,Line 1
无法绑定多部分标识符“T.MUSTERI_KODU”。
原始代码:
SELECT T.TAKIP_NO AS 'TAKİP NO',
T.CIKIS_TARIHI AS 'ÇIKIŞ TARİHİ' ,
T.TES_TARIHI AS 'TESLİM TARİHİ',
MAX(G2.TARIH) AS 'GONDERİ HAREKET TESLİM TARİHİ',
MAX(G.TARIH) AS 'KURYEDE TARİHİ',
DATEDIFF(dd,MAX(G.TARIH), T.TES_TARIHI) AS 'GÜN'
FROM TESLIM_FORMU T
INNER JOIN GONDERI_HAREKET G ON T.TAKIP_NO = G.TAKIP_NO
INNER JOIN GONDERI_HAREKET G2 ON T.TAKIP_NO = G2.TAKIP_NO
WHERE T.MUSTERI_KODU = 2483
AND YEAR(T.CIKIS_TARIHI) = 2012
AND G.ISLEM_KODU = 15
AND G2.ISLEM_KODU IN (40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
78)
AND T.DURUMU = 1
AND T.ISLEM_KODU <> 77
GROUP BY T.TAKIP_NO,
T.CIKIS_TARIHI,
T.TES_TARIHI HAVING (DATEDIFF(dd,MAX(G.TARIH), T.TES_TARIHI) >= 1)
ORDER BY DATEDIFF(dd,MAX(G.TARIH), T.TES_TARIHI)
答案 0 :(得分:0)
我对Vland的回答及其完成做了一些改变!
UPDATE T
SET T.TES_TARIHI = X.TARIH
FROM TESLIM_FORMU T
INNER JOIN
(SELECT T.TAKIP_NO, G.ISLEM_KODU, MAX(G.TARIH) AS TARIH
FROM GONDERI_HAREKET G
INNER JOIN TESLIM_FORMU T ON T.TAKIP_NO = G.TAKIP_NO
INNER JOIN GONDERI_HAREKET G2 ON T.TAKIP_NO = G2.TAKIP_NO
WHERE T.MUSTERI_KODU = 2483
AND YEAR(T.CIKIS_TARIHI) = 2013
AND G.ISLEM_KODU = 15
AND T.DURUMU = 1
AND T.ISLEM_KODU <> 77
AND G2.ISLEM_KODU IN (40,41,42,43,44,45,46,47,48,49,78)
GROUP BY T.TAKIP_NO,
T.CIKIS_TARIHI,
T.TES_TARIHI,
G.ISLEM_KODU
HAVING (DATEDIFF(dd,MAX(G.TARIH), T.TES_TARIHI) >= 1)) X ON X.TAKIP_NO = T.TAKIP_NO
感谢您的帮助和患者弗拉德。