是否可以在 CASE 语句中按多个列进行分组?我收到错误“',' 附近的语法不正确。” 在下面的代码...
SELECT
CASE
WHEN Type = 'Test'
THEN Description
ELSE MAX([Description])
END AS 'Description'
GROUP BY
CASE
WHEN Type = 'Test'
THEN Description
ELSE ''
END,
Type, Account, Structure
Run Code Online (Sandbox Code Playgroud) 我正在使用一个 Excel 文件,该文件具有不同格式的日期,但是当我尝试将其转换或将其转换为 SQL DATETIME 时,其中一种格式给我带来了一些痛苦。例如:
Thu Oct 16 13:40:19 2014,Tue Apr 1 12:20:40 2014等等。
基本上格式是ddd MM dd HH:mm:ss yyyy.
我想知道是否有某种日期样式可以让我在一行中进行转换。我可以为此编写一个函数,但我想知道是否有更优雅的解决方案。我谷歌搜索没有运气。
我需要创建一个如下所示的表:
+----+---------+---------+
| Id | Product | Version |
+----+---------+---------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 1 | 3 |
| 5 | 2 | 2 |
+----+---------+---------+
Run Code Online (Sandbox Code Playgroud)
哪里ID是Identity(1,1)我需要的Version是自动填充这取决于插入Product。
SELECT使用ROW_NUMBER()with可以达到类似的效果PARTITION:
SELECT ID, Product,
ROW_NUMBER() OVER(PARTITION BY Product ORDER BY ID) AS Version
FROM Products
Run Code Online (Sandbox Code Playgroud)
我有哪些选择?
如果我有一个包含 2 列的简单表和一个由两列组成的复合主键,我该如何重命名其中一列,但前提是它不会导致主冲突?
这是一个简化的示例。
拿下表:
User | Role
------|----------------
Joe | User
Joe | Administrator
Brian | User
Anna | Administrator
Anna | Admin
Run Code Online (Sandbox Code Playgroud)
假设我想编写以下查询:
UPDATE UserRoles Set Role = 'Admin' WHERE Role = 'Administrator'
Run Code Online (Sandbox Code Playgroud)
在不使用游标的情况下,如何更改 SQL 更新语句以避免重命名 Anna(因为该用户已经具有 Admin 角色),但仍重命名 Joe?
甚至可以使用基于集合的 SQL 还是使用游标是唯一的方法?
谢谢。
我有一个 varchar 列有像 (2015-12-02 20:40:37.8130000) 这样的数据,我已经从 csv 文件导入到 SQL 表。我需要将此列转换为数据时间 (2013-03-17 14:15:49.687)。
ALTER TABLE track_date alter column start_time datetime.
Run Code Online (Sandbox Code Playgroud)
得到错误为:
从字符串转换日期和/或时间时,消息 241,级别 16,状态 1,第 1 行转换失败。
使用 convert 函数进行转换时,得到相同的错误:
SELECT convert(datetime,start_time,5) from track_date
Run Code Online (Sandbox Code Playgroud)
从字符串转换日期和/或时间时,消息 241,级别 16,状态 1,第 1 行转换失败。
你能帮忙吗,如何将此 varchar 数据转换为日期时间格式?
WHILE (@7DaysEarlierPartitionIntegerId <= @CurrentPartitionIntegerId)
BEGIN
Set @7DaysEarlierPartitionId
= CAST(@7DaysEarlierPartitionIntegerId AS char)
set @sqlCommand
= 'Select * from '
+ quotename(@RequestUsage_Partition + @7DaysEarlierPartitionId)
+ 'where UserLogin like''r2\rohit.kharade'
exec(@sqlCommand)
set @7DaysEarlierPartitionIntegerId
= @7DaysEarlierPartitionIntegerId + 1
END
Run Code Online (Sandbox Code Playgroud)
我收到错误:
字符串 'r2\rohit.kh' 后的非封闭引号。
如何执行 exec 命令 UserLogin =%r2\rohit.kharade%
我正在尝试获取整个 SQL 服务器中未使用过程的列表。我已经完成了获取所有过程的列表,现在我正在使用以下脚本来确定使用了哪些过程。
DECLARE @command varchar(1000)
SELECT @command =
'USE [?] SELECT
qt.text AS "SP Name",
qs.execution_count AS "Execution Count",
qs.max_logical_reads,
qs.max_logical_writes,
qs.creation_time,
DB_NAME() as DatabaseName,
DATEDIFF(Minute, qs.creation_time, GetDate()) AS "Age in Cache"
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
ORDER BY qt.text DESC'
EXEC sp_MSforeachdb @command
Run Code Online (Sandbox Code Playgroud)
我知道这只会显示重启后使用过的程序。数据似乎有些作用 - 然而;我遇到的问题是它似乎显示了整个程序文本 IE:
CREATE PROCEDURE dbo.proc_MSS_PropagationGetQueryServers AS
DECLARE @Temp table(ServerID int, SearchServerName nvarchar(31), IndexDirectory nvarchar(260),
MachineStatus int, LastPropagationTime datetime,
PropagationStatus int ) INSERT INTO @Temp
SELECT SearchServerDirectory,
LastPropagationTime Index,LastPropagationMachineName 1 …
我使用的是 SQL Server 2005。我的一个备份驱动器已满,所以我想移动 2 天之前的备份。
我正在考虑创建一个每天运行的作业,但卡在了移动.bak文件的脚本上。
您知道从驱动器 A 移动文件并将其移动到共享位置的脚本吗?我的.bak文件没有时间戳。
我正在尝试使用左外连接从两个表中返回数据。MetaKnight 拥有最多的 storeNames,我希望所有这些都返回,当然还有来自 KnightNinja 的相应数据。我把下面的语法放在一起,但我的语法只返回两个表中符合条件的商店的名称。例如,应该返回 Store D 和 Store E,因为日期是 2017 年 1 月 - 但语法不会返回它。为什么?
这是示例垃圾 DDL 和查询
Create Table MetaKnight
(
storeName varchar(500) NOT NULL
,storeNumber varchar(100) NOT NULL Primary Key
,openDate date NOT NULL
)
Create NonClustered Index snIndex
On MetaKnight (storeName ASC)
Create Table KnightNinja
(
storeName varchar(500) NOT NULL
,ssID varchar(100) NOT NULL Primary Key
,c1 int not null Default(0)
,c2 int not null Default(0)
,c3 int not null Default(0)
,c4 int not null Default(0) …Run Code Online (Sandbox Code Playgroud) 我有一个查询,我想在其中检索不同的Child行,但按Parent. 如果我执行以下操作,则会收到错误消息,因为 中指定的列ORDER BY未包含在DISTINCT列表中:
SELECT
DISTINCT c.foo, c.bar
FROM Parent p
JOIN Child c on c.parentId = p.id
ORDER BY p.createdDate
Run Code Online (Sandbox Code Playgroud)
但是,如果我添加p.createdDate到选择列表中,我将失去Child行的独特性,因为p.createdDate它们都不同。
如果我使用 CTE 或子查询首先进行排序,然后从中选择不同的行,则外部查询不保证它将保持内部/cte 查询的顺序。
有没有办法实现这一目标?
t-sql ×10
sql-server ×9
datetime ×1
ddl ×1
disk-space ×1
distinct ×1
group-by ×1
identity ×1
order-by ×1
powershell ×1
update ×1