我正在使用SQL Server 2008.
我需要你的建议,为什么这两个查询得到相似的时间(超过2百万行约52秒):
查询1:
DBCC DROPCLEANBUFFERS
DECLARE @curr INT
SET @curr = YEAR(GETDATE())
SELECT MAX([Date])
FROM DB_Item
WHERE YEAR([Date]) = @curr
Run Code Online (Sandbox Code Playgroud)
查询2:
DBCC DROPCLEANBUFFERS
SELECT MAX([Date])
FROM DB_Item
Run Code Online (Sandbox Code Playgroud)
使用实际执行计划,我看到它扫描Clustered Index scan
.
那么,为什么我们有另一种方法可以Date
迅速在1个表中获得最大值?
非常感谢您的帮助.
谢谢.
这与我的上一个问题有关.我有这个代码:
DECLARE @PatientId UNIQUEIDENTIFIER
DECLARE @FormId NCHAR(16)
DECLARE @columns VARCHAR(8000)
DECLARE @query VARCHAR(8000)
SET @PatientId = '3387F956-EA0A-4660-8647-1096E25A3C6F'
SET @FormId = 'form111'
SELECT @columns = COALESCE(
@columns + ',[' + RTRIM(AttributeGroup) + '_' + RTRIM(AttributeId) + ']',
'[' + RTRIM(AttributeGroup) + '_' + RTRIM(AttributeId) + ']'
)
FROM DVItems
WHERE PatientId = @PatientId AND FormId = @FormId
GROUP BY AttributeGroup, AttributeId
SET @query = '
SELECT *
FROM(
SELECT
PatientId,
RTRIM(AttributeGroup) + ''_'' + RTRIM(AttributeId) AS ColName,
FormId,
Description
FROM DVItems …
Run Code Online (Sandbox Code Playgroud) 我有一个表格,下面的示例输出.
UserID Checktime CheckStatus
3175 2013-12-22 07:02:10.000 I
3175 2013-12-22 13:01:01.000 O
3175 2013-12-22 13:49:54.000 I
3175 2013-12-22 13:49:55.000 I
3175 2013-12-22 15:58:42.000 O
3175 2013-12-23 06:02:58.000 I
3175 2013-12-23 14:00:29.000 O
3175 2013-12-24 05:17:09.000 I
3175 2013-12-24 12:34:25.000 O
3175 2013-12-24 12:34:26.000 O
Run Code Online (Sandbox Code Playgroud)
我想构建一个查询来实现以下结果:
UserID Date CheckIn CheckOut Hours
3175 2013-12-22 07:02:10 13:01:0 5.98
3175 2013-12-22 13:49:54 15:58:42 2.15
Run Code Online (Sandbox Code Playgroud)
注意:1.忽略重复的IN.原始数据中的第三行和第四行.2.分钟数小时为小时计算中的小时.
我需要tsql查询的帮助才能获得这些结果.
我当前的代码导致了许多其他问题 - 因为每次都必须在临时表中重新计算.
我如何列出每个数据库SQL Server 2014
和表空间大小?
我测试了这个查询
EXEC sp_spaceused null, false
Run Code Online (Sandbox Code Playgroud)
但我只得到一个数据库的结果.
我会尝试解释我的问题.
我的表结构:
name Code_1 Code_1_value Code_2 Code_2_value Code_3 Code_3_value
N1 ABC1 10 ABC2 15 ABC3 6
N2 ABC1 3 NULL NULL BAA1 10
N3 ABC4 5 ABC2 11 ADC3 6
Run Code Online (Sandbox Code Playgroud)
我想将这些值转换为新格式:
name code value
N1 ABC1 10
N1 ABC2 15
N1 ABC3 6
N2 ABC1 3
Run Code Online (Sandbox Code Playgroud)
我不知道逻辑应该如何(枢轴?)
如何用(#和;)拆分SQL字符串?
Billing Column,其中字符串以下面的格式保存
548784545S#15/01/2016;84854555545#13/01/2016;45454554545#21/01/2016
Run Code Online (Sandbox Code Playgroud)
拆分#和; 我想要下面的格式
548784545S 15/01/2016
84854555545 13/01/2016
45454554545 21/01/2016
Run Code Online (Sandbox Code Playgroud)
到目前为止我做了什么
SELECT SUBSTRING(CNT_SHIPPING_BILLNO, 1,
CASE CHARINDEX('#', CNT_SHIPPING_BILLNO)
WHEN 0
THEN LEN(CNT_SHIPPING_BILLNO)
ELSE CHARINDEX('#', CNT_SHIPPING_BILLNO) - 1
END)
AS Billno,
SUBSTRING(CNT_SHIPPING_BILLNO,
CASE CHARINDEX('#', CNT_SHIPPING_BILLNO)
WHEN 0
THEN LEN(CNT_SHIPPING_BILLNO) + 1
ELSE CHARINDEX(';', CNT_SHIPPING_BILLNO) + 1
END, 1000) AS BillDate
FROM SHIPPINGBILL
Run Code Online (Sandbox Code Playgroud)
在这里,我只使用上面的查询获得初始值
548784545S 15/01/2016;84854555545#13/01/2016;45454554545#21/01/2016
Run Code Online (Sandbox Code Playgroud) 我有一个Date Date,它是Datetime类型.我有一个nvarchar列,里面有时间.例如:
Date(datetime) Time(nvarchar)
----------- ----------
2010-06-08 00:00:00.000 17:30
Run Code Online (Sandbox Code Playgroud)
我怎样才能将它们连接到2010-06-08 17:30:00.000作为日期时间对象.提前致谢.
我有一些问题用这个表和代码创建查询,我知道"GROUP BY Branch.BranchName"导致获得多个记录,但是,如何避免这种情况并在单个查询中执行此操作.我想要得到的是一个包含BranchName的表 - total paidedvalue-- total notpayedvalue
SELECT
(
SELECT SUM (DeptDesciption.DeptValue)
FROM dbo.SudentPayments
INNER JOIN dbo.Student ON dbo.SudentPayments.StudentId = dbo.Student.StudentId
INNER JOIN dbo.DeptDesciption ON SudentPayments.DeptDesciptionId = DeptDesciption.DeptDesciptionId
INNER JOIN dbo.Branch on dbo.Branch.BranchId = Student.BranchId
WHERE SudentPayments.IsDeptPayed = 0
GROUP BY Branch.BranchName
) AS Payed,
(
SELECT SUM (DeptDesciption.DeptValue)
FROM dbo.SudentPayments
INNER JOIN dbo.Student ON dbo.SudentPayments.StudentId = dbo.Student.StudentId
INNER JOIN dbo.DeptDesciption ON SudentPayments.DeptDesciptionId = DeptDesciption.DeptDesciptionId
INNER JOIN dbo.Branch on dbo.Branch.BranchId = Student.StudentId
WHERE SudentPayments.IsDeptPayed = 1
GROUP BY Branch.BranchName …
Run Code Online (Sandbox Code Playgroud) CREATE TABLE AverageStudents
AS
(SELECT *
FROM StudentData
WHERE GPA > 3.0);
Run Code Online (Sandbox Code Playgroud)
我一直在收到错误
Incorrect syntax near the keyword 'AS'.
Run Code Online (Sandbox Code Playgroud)
我的简单代码对你来说是否合适?我真的想要一张桌子(不是视图,感谢建议).
我正在 SQL Server 2012 中编写存储过程。我有一个像这样定义的临时表:
DECLARE @CURRENT_RET_WEEK_PTIMEIDS TABLE ( PTIMEID INT )
Run Code Online (Sandbox Code Playgroud)
我还EXECUTE
用来编写动态 SQL 查询。有什么办法可以将此表加入上述临时表吗?