下面是一个存储过程,用于计算一个月内制作的小部件数量。如果没有制作小部件,则不存在任何记录。
执行计划显示INNER JOIN了 M 和 A 表中的一个,在语句中我正在执行一个LEFT OUTER JOIN.
我想计算一个时间范围内制作的小部件数量,将其加入月份表(1 月至 12 月),并将结果显示在 SSRS 报告中。加入是因为我无法获得不存在的COUNT数据。目前我得到:
MonthName Widget Count
February 2
March 3
April 4
May 6
June 5
July 4
August 6
September 2
October 4
November 1
December 2
Run Code Online (Sandbox Code Playgroud)
我希望列表中没有包含小部件的月份。
这是代码:
DECLARE @OName varchar(50)
DECLARE @Start_Date DATE
DECLARE @End_Date DATE
SET @OName = 'John'
SET @Start_Date = '01/01/2012'
SET @End_Date = '12/31/2012'
SELECT M.[MonthName]
,COUNT(A.[Widget_ID]) AS 'Widget Count'
FROM [Connector].dbo.[Months] AS M
LEFT …Run Code Online (Sandbox Code Playgroud) 假设我有一个名为的表tblTemp,其中包含以下数据:
| ID | AMOUNT |
----------------
| 1 | 10 |
| 1-1 | 20 |
| 1-2 | 30 |
| 1-3 | 40 |
| 2 | 50 |
| 3 | 60 |
| 4 | 70 |
| 4-1 | 80 |
| 5 | 90 |
| 6 | 100 |
Run Code Online (Sandbox Code Playgroud)
X如果 ID 只有一个 ID 或 ( X-Y) 如果它是新 ID ( Y) 是( ) 的子代,则ID 将被格式化为(不带破折号X)。
我想添加一个新列( …
给定一个包含存储过程名称的变量:
DECLARE @stored_procedure_name sysname;
SET @stored_procedure_name = 'some_stored_procedure_name';
Run Code Online (Sandbox Code Playgroud)
如何删除存储过程?
我有一个现有的 UPDATE 表 SET 语句,该语句一直在工作,直到其中一个司机在他/她的班次中使用了两辆不同的卡车,所以现在我需要做的是修改 UPDATE 语句,以便我可以在几个卡车上使用 MIN() 函数列。当我尝试将 MIN() 函数添加到存在的语句中时,我收到了错误
聚合可能不会出现在 UPDATE 语句的集合列表中。”
这是我现有的 UPDATE 语句代码:
UPDATE #tmpDriverTime
SET @StartPlus8 = CASE
WHEN ((CONVERT(int, DTE.StrtTm) + 800) > 2400) AND (CONVERT(INT, DTE.StartBreak) < 1600) THEN ((CONVERT(INT, DTE.StrtTm) + 800) - 2400)
ELSE (CONVERT(INT, DTE.StrtTm) + 800)
END,
WorkDay1Break = CASE
WHEN ((WorkDay1 <=8) AND (WorkDay1Break = 0)) THEN 2 --Does not need a break
WHEN ((WorkDay1 > 8 AND DTE.StartBreak IS NULL) AND (WorkDay1Break = 0)) THEN 1 --Worked …Run Code Online (Sandbox Code Playgroud) 谁能向我解释为什么这个查询返回 0.000?
SELECT CAST(20/1024 AS NUMERIC(10,3))
Run Code Online (Sandbox Code Playgroud)
我只是想简单地将 MB 转换为 GB
谢谢
我一直在研究新的 70-461 MCSE 数据考试的考试指南,现在我想练习我的 T-SQL。有没有人知道任何好的资源,其中提出了场景,您必须通过实践创建解决方案。例如,当我学习 C# 时,我会朝着创建某种类型的系统或项目的目标努力,例如 Web 应用程序或执行特定操作的控制台应用程序。我正在努力想出测试场景来改善我的 T-SQL 体验,因为我没有关于 SQL 专业人员在日常工作中做什么的参考框架。
这是我第一次处理大型数据库,我想知道为什么下面的两个查询在执行计划方面是不同的。
我在特定表上设置了索引:
CREATE NONCLUSTERED INDEX [IX_UBHSD_xploc_trandt2] ON [dbo].[UBHSD]
(
[xploc] ASC, [trandt2] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,
DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,它使用索引。
SELECT COUNT(*) as cnt
FROM [dbo].[UBHSD]
WHERE [xploc] != '' AND [trandt2] >= CAST('2012-01-01' AS DATETIME)
Run Code Online (Sandbox Code Playgroud)

但是当我在不使用聚合的情况下运行查询时:
SELECT *
FROM [dbo].[UBHSD]
WHERE [xploc] != '' AND [trandt2] >= CAST('2008-01-01' AS DATETIME)
Run Code Online (Sandbox Code Playgroud)

我期望两个查询都使用索引。但是第二个查询执行全表扫描。
为什么会这样?我错过了什么?
我正在尝试编写一个查询来对一些数据进行非规范化以集成到我们的数据仓库中,特别是围绕生成一些时隙。
在我的源系统中,我有一个表,它有一个开始时间和结束时间,然后有一列指定每 15 分钟间隔有多少约会空档可用。
例子:
Location | Start Time | End Time | Appointment Slots
A | 9:00 am | 5:00 pm | 2
B | 9:00 am | 5:00 pm | 1
Run Code Online (Sandbox Code Playgroud)
我已经能够使用 CTE 生成 15 分钟块的列表。但是,每个 15 分钟的插槽只是说位置 A 有 2 个插槽可用,位置 B 有 1 个插槽可用。我想要的是能够为位置 A 每 15 分钟生成 2 行,每 15 分钟生成 1 行对于位置 B。
我的一个数据库每天都在增长几场演出。这是非常不寻常的,因为它仍处于开发阶段。经过小的研究,我发现偶数日志表几乎是数据库的大小(100GB),所以我清除了它。我运行了一个脚本来检查这个数据库中的表大小,一切都恢复正常。也就是说,没有可笑的胖桌子。然而,尽管有问题的表的饮食,数据库的总体大小并没有改变。
有什么建议?
顺便说一句,我正在使用 SQL SERVER 2012
谢谢,大卫
我有下表(省略了几个字段):
CREATE TABLE [Device](
[DeviceId] [int] IDENTITY(1,1) NOT NULL,
[AuthorizedDate] [datetime2](0) NULL,
[DeauthorizedDate] [datetime2](0) NULL,
[MemberId] [int] NOT NULL,
...
CONSTRAINT [PK_Device] PRIMARY KEY CLUSTERED
(
[DeviceId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
该表用于跟踪每个成员的设备 - 他们现在只能同时激活 5 台设备,并且在 90 天内只能进行 3 次更改。此表不足以强制执行 3 更改规则(我不会详细说明)。为此,我决定创建一个日志表:
CREATE TABLE [SwapLog](
[SwapLogId] [int] IDENTITY(1,1) NOT NULL,
[MemberId] [int] NOT NULL,
[DeauthorizationDate] [datetime] NOT NULL,
[DeauthorizedDeviceId] …Run Code Online (Sandbox Code Playgroud)