有没有办法用IN子句制作CASE语句?
SELECT
CASE c.Number
IN ('1121231','31242323') THEN 1
IN ('234523','2342423') THEN 2
END AS Test
FROM tblClient c
Run Code Online (Sandbox Code Playgroud) 有没有办法用一个set语句设置所有变量,就像使用declare语句一样?
例如:
Declare @Test VARCHAR(10),
@Test2 VARCHAR(10),
@Test3 INT
SET @Test = 'test'
SET @Test2 = 'Test2'
SET @Test3 = 1
Run Code Online (Sandbox Code Playgroud)
我想在哪里做类似下面的事情,但下面的内容不起作用:
Set @Test = 'test',
@Test2 = 'Test2',
@Test3 = 3
Run Code Online (Sandbox Code Playgroud) 使用日期(包括2个日期参数之间)填充临时表的最简单方法是什么.我只需要每月的第一天约会.
例如,如果@StartDate ='2011-01-01'和@EndDate ='2011-08-01'
然后我希望在表格中返回
2011-01-01
2011-02-01
2011-03-01
2011-04-01
2011-05-01
2011-06-01
2011-07-01
2011-08-01
Run Code Online (Sandbox Code Playgroud) 我有一个主Web.config文件,下面有一个Web.Test.config,Web.Development.Config等等.
当我在Test config上通过SlowCheetah预览转换时,它似乎正确地转换了值.
当我将构建环境从开发切换到测试并尝试调试应用程序时,应用程序在主Web.config文件中的任何值下运行(即它不会转换任何内容).
如何使构建环境在调试时选择正确的配置而不是总是使用基本Web.config文件?这可能吗?
我一直遇到使用以下问题:
Column_Name BETWEEN @StartDate AND @EndDate.
Run Code Online (Sandbox Code Playgroud)
这是因为@EndDate = 00:00:00.000的时间,它没有获取当天的所有值.
我如何将@EndDate(始终00:00:00.000)转换为始终为Date + 23:59:59.999?
我有以下查询:
SELECT
Account,
Unit,
SUM(state_fee),
Code
FROM tblMta
WHERE MTA.Id = '123'
GROUP BY Account,Unit
Run Code Online (Sandbox Code Playgroud)
这当然会引发异常,因为代码不在group by条款中.每个state_fee都有一个代码.如何将此代码显示在1条记录中(每个state_fee 1个代码,即每个单元的多个state_fee)作为逗号分隔列表?我在这里查看了不同的解决方案,但我找不到任何有用的解决方案group by.
sql sql-server sql-server-2005 aggregate-functions sql-server-group-concat
我昨天参加了一个用户组会议,他们指出使用参数化查询比编码查询更好.这让我思考,这有什么好处(显然在比这更大的规模):
DECLARE @Client1 UNIQUEIDENTIFIER,
@Client2 UNIQUEIDENTIFIER
SET @ClientId1 ='41234532-2342-3456-3456-123434543212';
SET @ClientId2 = '12323454-3432-3234-5334-265456787654';
SELECT ClientName
FROM dbo.tblclient
WHERE id IN (@Client1,@Client2)
Run Code Online (Sandbox Code Playgroud)
相反:
SELECT ClientName
FROM dbo.tblclient
WHERE id IN ('41234532-2342-3456-3456-123434543212','12323454-3432-3234-5334-265456787654')
Run Code Online (Sandbox Code Playgroud) 我有4个案例陈述完全相同的CASE标准,但它们都有不同的THEN/ELSE陈述.
是否可以将其全部合二为一,或者我是否需要将这些全部分开并多次复制和粘贴代码?
,CASE WHEN lm.Id IN ('1','2','3') THEN lm.name ELSE lm.Desc END AS [Column1]
,CASE WHEN lm.Id IN ('1','2','3') THEN '3' ELSE '1' END AS [Column2]
,CASE WHEN lm.Id IN ('1','2','3') THEN 'True' ELSE 'False' END AS [Column3]
Run Code Online (Sandbox Code Playgroud)
用更少的代码可以做到这一点吗?
如果我在各种计算中使用了带有标量函数的select语句,那么标量函数是否会被多次调用?如果是这样,有没有办法优化它,所以它只调用每个选择一次的函数,因为在我的真实查询中它将被调用数千次,每次选择X 6次.
例如:
SELECT
[dbo].[fn_Days](@Account) + u.[DayRate],
[dbo].[fn_Days](@Account) / u.[WorkDays]
FROM [dbo].[tblUnit] u
Run Code Online (Sandbox Code Playgroud)
所有fn_days都返回一个工作日的int.
我试图找出为什么逻辑读取在目标表上执行时,当它是一个空白表时插入它.我有下表.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Employee](
[ID] [int] IDENTITY(1,1) NOT NULL,
[EmployeeID] [int] NOT NULL,
[EmployeeName] [varchar](50) NOT NULL
) ON [FG_Test]
GO
SET ANSI_PADDING OFF
GO
Run Code Online (Sandbox Code Playgroud)
这是一个空白表,ID为主键,该ID具有聚簇索引.当我使用以下插入语句时
TRUNCATE TABLE [dbo].[Employee];
INSERT INTO [dbo].[Employee] WITH (TABLOCK) (EmployeeID, EmployeeName)
(
SELECT EmployeeID,
EmployeeName
FROM Process.Employee
);
Run Code Online (Sandbox Code Playgroud)
根据设置Statistics IO ON,我在dbo.Employee表上获得1596236个逻辑读取.当我删除索引时,这些逻辑读取不再发生,然后当我读取 - 添加完全相同的索引时,逻辑读取也不再发生.当我将索引保留在表上时,逻辑读取会再次开始.
为什么会这样?