如何解决SQL:使用视图中的日期日历使用总和SET NOCOUNT *关键字'SET'附近的语法不正确*
对于代码中的混乱,我深表歉意。我是通过反复试验,错误以及从此处的读取/掠夺内容中自学而成的。
我制造了一个怪物,该怪物确实可以完成其意图,但是我无法将其放到视野中。在其中,我使用日历生成一组相关日期,然后对本地金额求和以从此处开始创建月度移动。这是我得到错误的地方,因为它给了我SET的语法错误。
在没有创建视图位的情况下运行(前四行,如果有对象等),它将产生正确的结果,我只需要能够将其放入视图中即可。
是否有一种方法可以解决它,或者我误入歧途而无法获得正确的结果呢?
不反对将其分为两个视图或其他内容。我只需要相同的输出。甚至不需要那么快。
代码:
IF OBJECT_ID('dbo.LeeroyJenkins','V') IS NOT NULL
DROP VIEW dbo.LeeroyJenkins
GO
CREATE VIEW dbo.LeeroyJenkins AS
SET NOCOUNT ON
DECLARE @Calendar TABLE (DETAIL DATETIME NOT NULL)
DECLARE @date DATETIME,@max_date DATETIME
SELECT @date = EOMONTH(MIN(DETAIL.CASHPOST)),@max_date = MAX(EOMONTH(DETAIL.CASHPOST)) FROM DETAIL
WHILE (@date <= @max_date)
BEGIN
INSERT INTO @Calendar (DETAIL) VALUES (@date)
SELECT @date = DATEADD(dy,1,@date)
END
SELECT
EOMONTH(C.DETAIL) AS DATE,FD.sCode AS YARDICODE,(A.SCODE + A.SDESC) AS ACCOUNTCODE,CASE WHEN D.HTRANCURRENCY = 0 THEN CL.SCODE ELSE CL2.SCODE END AS CURRENCYCODE,CASE WHEN SUM(D.STRANAMOUNT) = 0 THEN 0 ELSE SUM(D.STRANAMOUNT) END AS BALANCE,CASE WHEN SUM(D.STRANAMOUNT) = 0 THEN 1 WHEN SUM(D.SAMOUNT) =0 THEN 1 ELSE CAST(SUM(D.SAMOUNT) / SUM(D.STRANAMOUNT) AS DEC(21,6)) END AS FXRATE
/* CASE WHEN SUM( D.SAMOUNT) = 0 THEN 0 ELSE SUM(D.SAMOUNT) END AS BASEBALANCE,*/
FROM
@Calendar C
INNER JOIN DETAIL D ON
D.CASHPOST <= C.DETAIL AND
D.CASHPOST >= C.DETAIL
INNER JOIN ACCT A ON D.HACCT = A.HMY
INNER JOIN TRANS TR ON TR.HMY = D.HINVORREC
/*LEFT JOIN ( SELECT 1000 BOOK,'BOTH' BOOKNAME UNION ALL SELECT BOOK,BOOKNAME FROM UL_BOOKS ) BK ON BK.BOOK = TR.ITYPE2 THIS IS WHERE WE CAN FILTER ACCOUNT CODES */
LEFT OUTER JOIN INTPROP INP ON D.HPROP = INP.HPROP
LEFT JOIN INTCURRENCY_INFO CL ON CL.HMY = INP.HCURRENCY
LEFT JOIN INTCURRENCY_INFO CL2 ON CL2.HMY = D.HTRANCURRENCY
INNER JOIN PROPERTY FD ON FD.HMY = D.HPROP
WHERE tr.itype = 10
GROUP BY
C.DETAIL,FD.SCODE,A.SCODE,/*ALL THESE CODES CAN BE REMOVED AND JUST USE CURRENCY ONCE SET*/
A.SDESC,D.HTRANCURRENCY,CL.SCODE,CL2.SCODE,CASE WHEN D.HTRANCURRENCY = 0 THEN CL.SCODE ELSE CL.SCODE END
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。