我正在尝试编写一个 CTE 查询,这对我来说可能是最高级的查询。(使用 SQL 已经 3 周了)。当我尝试运行此查询时,出现错误
消息 252,级别 16,状态 1,第 4 行递归公用表表达式“Sixer”不包含顶级 UNION ALL 运算符。
所以这里是瘦 - 我包括 DDL(这是巨大的)并且还说明 table Fiver 和 table first 看起来相同,但它们是不同的,因为 first 可能包含不存在于 Fiver 中的 acctNum,反之亦然。现在这里是 DDL
Create Table First
(
Doctor varchar(100)
,AcctNum varchar(10)
,ChargedAmt decimal(10,2)
,DOS date
)
Insert Into First (Doctor, AcctNum, ChargedAmt, DOS) VALUES
('Doctor A', '912224661', '1329', '1/31/2016'),
('Doctor A', '912221628', '12203', '1/31/2015'),
('Doctor A', '912219195', '1096', '5/14/2014'),
('Doctor A', '912224987', '4195.42', '2/29/2016'),
('Doctor A', '912219200', '11442.03', '5/16/2014'),
('Doctor A', …
Run Code Online (Sandbox Code Playgroud) 我需要一种查询 SQL 表并按季度提取数据的方法。我知道 SQL Server 有一个DatePart()
函数,它有一个参数,q = Quarter
我想出了这个语法,但是对于一个包含大约 50,000 行的表,这个语法非常慢。这是实现此结果的最佳方法还是可以进行更多优化?
Declare @startdate date = '20170101', @enddate date = '20171231'
Select
Employeename
,[Total Amount Paid] = SUM(ISNULL(Totalcheckamt,0))
FROM dbo.PaymentHistory
WHERE DatePart(q,[DatePaid]) = 1
AND [DatePaid] BETWEEN CAST(DateAdd(yy, -1, @startdate) As Date)
AND CAST(DateAdd(yy, -1, @enddate) As Date)
GROUP BY Employeename
Order By Employeename ASC
Run Code Online (Sandbox Code Playgroud)
编辑
我想要的返回结果是这样的
Employee Name -- Q1 --- Q2 --- Q3 --- Q4
James XXXXX.XX XXXX.XX XXXX.XX XXXX.XX
Roger XXXXX.XX XXXX.XX XXXX.XX XXXX.XX
Run Code Online (Sandbox Code Playgroud)
编辑 …
我正在尝试在 SQL Server 2008 R2 中进行计算,但我不断收到错误
消息 245,级别 16,状态 1,第 10
行将 varchar 值“.05”转换为数据类型 int 时转换失败。
更改表结构不是一种选择,有没有办法可以更改查询以便成功执行?
DECLARE @Test1 TABLE
(
field1 VARCHAR(10),
field2 INT
);
INSERT INTO @Test1 ( field1, field2 )
VALUES ( '.05', 12 );
SELECT field1 / field2
FROM @Test1;
Run Code Online (Sandbox Code Playgroud)