這個工作在MS SQL:表字段不能約束
SELECT TOP (100) PERCENT SUM(P.bedrag) AS ex
FROM dbo.verkopen AS P INNER JOIN
(SELECT DISTINCT dbo.verkopen.ino
FROM dbo.verkopen INNER JOIN
dbo.doss ON dbo.verkopen.ino = dbo.doss.ino INNER JOIN
dbo.vdagbk ON dbo.verkopen.ino = dbo.vdagbk.ino
WHERE (dbo.doss.uitvoerder LIKE 'LL') AND (dbo.doss.dosno LIKE '101520')) AS C ON C.ino = P.ino
我不得不那樣做,因爲在我的結果複製某些行。
但我想這樣做吧:
SELECT TOP (100) PERCENT doss.dosno, doss.dosnm, SUM(P.bedrag) AS TotBedraggefactureerd, SUM(P.betaald) AS TotBetaald, SUM(P.totincl) AS TotIncl,
SUM(vdagbk.beginsaldo) AS totbeginsaldoontvangen, SUM(vdagbk.eindsaldo) AS toteindsaldoontvangen,
SUM(CASE vdagbk.reden WHEN 'H' THEN vdagbk.bedrag END) AS ontvangenhonoraria, SUM(CASE vdagbk.reden WHEN 'P' THEN vdagbk.bedrag END)
AS ontvangenprov, SUM(CASE vdagbk.reden WHEN 'A' THEN vdagbk.bedrag END) AS dagboekA, SUM(CASE vdagbk.reden WHEN 'G' THEN vdagbk.bedrag END)
AS dagboekG, SUM(CASE vdagbk.reden WHEN 'E' THEN vdagbk.bedrag END) AS dagboekE
FROM dbo.verkopen AS P INNER JOIN
(SELECT DISTINCT dbo.verkopen.ino
FROM dbo.verkopen INNER JOIN
dbo.doss ON dbo.verkopen.ino = dbo.doss.ino INNER JOIN
dbo.vdagbk ON dbo.verkopen.ino = dbo.vdagbk.ino
WHERE (dbo.doss.uitvoerder LIKE 'LL') AND (dbo.doss.dosno LIKE '101520')) AS C ON C.ino = P.ino
GROUP BY doss.dosno, doss.dosnm
ORDER BY doss.dosno
我知道這是現在一切搞砸了。我可以做一個小小的SQL,但這有點過頭了。
我知道它只包含.ino,但我現在在查詢中放什麼。
我有這樣的:
`SELECT TOP (100) PERCENT doss.dosno, doss.dosnm, SUM(verkopen.bedrag)/2 AS TotBedraggefactureerd, SUM(verkopen.betaald) AS TotBetaald, SUM(verkopen.totincl)
AS TotIncl, SUM(vdagbk.beginsaldo) AS totbeginsaldoontvangen, SUM(vdagbk.eindsaldo) AS toteindsaldoontvangen,
SUM(CASE vdagbk.reden WHEN 'H' THEN vdagbk.bedrag END) AS ontvangenhonoraria, SUM(CASE vdagbk.reden WHEN 'P' THEN vdagbk.bedrag END)
AS ontvangenprov, SUM(CASE vdagbk.reden WHEN 'A' THEN vdagbk.bedrag END) AS dagboekA, SUM(CASE vdagbk.reden WHEN 'G' THEN vdagbk.bedrag END)
AS dagboekG, SUM(CASE vdagbk.reden WHEN 'E' THEN vdagbk.bedrag END) AS dagboekE
FROM verkopen INNER JOIN
doss ON verkopen.ino = doss.ino INNER JOIN
vdagbk ON verkopen.ino = vdagbk.ino
WHERE (dbo.doss.uitvoerder LIKE 'LL') AND (dbo.doss.dosno LIKE '101520') GROUP BY doss.dosno, doss.dosnm
ORDER BY doss.dosno
`
但返回的結果在某些情況下的兩倍。
您可能會覺得有用的一些關注點:首先,您可以擺脫「Top(100)Percent」位。這隻會讓你的代碼複雜化,而且什麼都不做。其次,SQL Server不怕一些額外的換行符。因此,您可以通過將totbeginsaldoontvangen和TotBedraggefactureerd以及所有其他代碼放在單獨的行中來使代碼更易於閱讀。 – PowerUser