如何将多列连接成一行?例如:
id name car
1 sam dodge
1 ram maserati
1 john benz
1 NULL mazda
2 kirk lexus
2 Jim rolls
1 GMC
Run Code Online (Sandbox Code Playgroud)
预期的结果集是:
ID name car
1 sam,ram,john dodge,maserati,benz,mazda,GMC
2 kirk,jim lexus,rolls
Run Code Online (Sandbox Code Playgroud)
使用我在 Stack Overflow 上找到的解决方案:
SELECT * FROM (
SELECT t.id,stuff([m].query('/name').value('/', 'varchar(max)'),1,1,'') AS [SomeField_Combined1],
stuff([m].query('/car').value('/', 'varchar(max)'),1,1,'') AS [SomeField_Combined2]
FROM dbo.test t
OUTER apply(SELECT (
SELECT id, ','+name AS name
,','+car AS car
FROM test WHERE test.id=t.id
FOR XML PATH('') ,type)
AS M) A)S
GROUP BY …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下代码动态创建一个临时表,并且我知道我们不能为同一个表创建两个创建语句。是否有解决方法可以像下面的代码一样以有条件的方式放置它。
CREATE PROC test @var1 CHAR(1)
as
BEGIN
IF(@var1 = X)
BEGIN
SELECT * INTO #result
FROM TABLE1
END
IF(@var1 = Y)
BEGIN
SELECT * INTO #result
FROM TABLE2
END
IF(@var1 = Z)
BEGIN
SELECT * INTO #result
FROM TABLE3
END
SELECT * FROM #result r
END
Run Code Online (Sandbox Code Playgroud)
目标是最终有一个名为 #result 的表,其中包含基于变量 (@var1) 值的列
编辑 1:
因为这是使用动态 SQL 的一个很好的候选者,如下所示,但我将无法使用#result
动态 SQL 范围之外的表,而这正是我需要的。
CREATE PROC test @var1 CHAR(1)
as
BEGIN
-- USING dynamic sql
DECLARE @sql VARCHAR(MAX)
IF(@var1 = 'X')
BEGIN
SET …
Run Code Online (Sandbox Code Playgroud) 我需要一个存储过程来检查 2 个链接服务器中的可用空间。(服务器是手动链接的)。我想出了这样的查询并使用 sql server 2008
ALTER PROCEDURE freespace
AS
BEGIN
CREATE Table #freespace(drive VARCHAR(50),freedrivespace VARCHAR(50));
DECLARE @servername VARCHAR(50);
DECLARE @sql VARCHAR(100);
DECLARE @space CURSOR;
SET @space= CURSOR FOR
SELECT Name FROM SERVERNAME;
OPEN @space;
FETCH NEXT
FROM @space INTO @servername;
WHILE @@FETCH_STATUS=0
BEGIN
SET @sql = '['+@servername+']...xp_fixeddrives';
INSERT INTO #freespace
EXEC(@sql);
FETCH NEXT FROM @space INTO @servername;
END
CLOSE @space;
DEALLOCATE @space;
END
Run Code Online (Sandbox Code Playgroud)
该servername
表由链接服务器的 servername 组成,如 server1、server2。
当我运行此查询时,会显示如下错误:
Msg 7202, Level 11, State 2, Line 1
Could …
Run Code Online (Sandbox Code Playgroud) 我有下面的 select 语句,结果非常慢(41 秒)
SELECT DISTINCT a.Doc_Resource_ID
,a.Parent_ID
,a.Logical_Path
,a.lvl
,CAST(SUBSTRING(a.Security_Level, 21, 1) AS TINYINT)
FROM Doc_ACL_Detail_D a
WHERE a.UserId = @I_vUserId
AND @I_vParentId = 0
OR (Logical_Path LIKE(CASE
WHEN @I_vParentId>0 THEN '%-'+LTRIM(STR(@I_vParentId))
END)
OR Logical_Path LIKE(CASE
WHEN @I_vParentId>0 THEN '%-'+LTRIM(STR(@I_vParentId))+'-%'
END ))
OPTION (MAXRECURSION 5000)
Run Code Online (Sandbox Code Playgroud)
我已经为表创建了非聚集索引Doc_ACL_Detail_D
,但执行计划仍然是表扫描。
我创建的索引:
CREATE NONCLUSTERED INDEX idx_Doc_ACL_Detail_D_UserId_Logical_Path
ON [dbo].[Doc_ACL_Detail_D] ([UserId],[Logical_Path])
INCLUDE (Parent_ID,Doc_Resource_ID,lvl,Security_Level)
Run Code Online (Sandbox Code Playgroud)
有人可以帮我优化这个语句吗?十分感谢。
select count(title_id)as algodata from titles where pub_id =1389
select count(title_id)as binnet from titles where pub_id =0877
select count(title_id)as newmoon from titles where pub_id =0736
Run Code Online (Sandbox Code Playgroud)
使用的数据库pubs
在 SQL Server 中。
我可以使用单个查询来显示单个记录中每个发布者(这里有 3 个发布者)的记录数吗?
最近我在dba.stackexchange 中问了一个问题,这个问题是关于 sql 中的数据层次结构的,一个叫chris allen 的人回答了这个问题,我真的很喜欢它,但是当我试图理解这个查询时,我更加困惑了。
这是查询:
Res_id Res_name Man_id
1 sam 3
2 Biju 4
3 adrian Null
4 Helen 3
5 Micah 4
select
level1.res_name as level1,
level2.res_name as level2,
level3.res_name as level3,
level4.res_name as level4,
level5.res_name as level5
from resource as level1
left join resource as level2 on level1.res_id=level2.man_id
left join resource as level3 on level2.res_id=level3.man_id
left join resource as level4 on level3.res_id=level4.man_id
left join resource as level5 on level4.res_id=level5.man_id
where …
Run Code Online (Sandbox Code Playgroud) 我在我的数据库上运行 sp_updatestats 时遇到问题它会在我的 emp 表更新和断开连接时生成错误我将在此处粘贴错误
Updating [dbo].[emp]
Msg 0, Level 11, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.
Msg 0, Level 20, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.
Run Code Online (Sandbox Code Playgroud)
是不是因为当我运行 DBCC checktable(emp) 时表有任何问题,它没有显示任何问题。那么是什么原因
更新:
我们如何在不安装@gbn 提到的服务包的情况下找到问题的根本原因,我们如何消除它。如果问题发生在安装了 sp2 的版本中,如果它发生在生产服务器中并且安装 Service Pack 是解决它的唯一方法,作为 dba 我们可以做什么?
我正在使用 SQL Server 2005,我需要创建一个带有字母字符和 3 个数字的主键:
p001
b201
Run Code Online (Sandbox Code Playgroud)
我知道我需要创建一个规则并将该规则绑定到主键列。我在使用LIKE
查询创建规则时有点困惑:
CREATE RULE pK-rule AS @pk LIKE'[a-z][0-9][0-9][0-9]'
Run Code Online (Sandbox Code Playgroud)
有人可以建议我需要改变什么吗?
所以我有一个表,其中包含以下 select 语句中列出的一些列。
SELECT [AccountName],
[AccountNumber],
[Tenor],
[Currency],
[TotalCredit],
[TotalDebit],
[CreditCount],
[DebitCount],
[AccountBalance],
[StatementStartDate],
[StatementEndDate]
FROM [TAF.EligibilityService].[dbo].[AccountStatements]
Run Code Online (Sandbox Code Playgroud)
我想使用StatementStartDate和StatementEndDate选择 6 个月前和今天之间存在的记录。
例如,如果开始日期是 1 年前,只要结束日期还在 6 个月前,就应该返回记录。
提前致谢。
我正在使用 SQL Server 2005 并使用 Northwind 数据库。我需要祖母凯利宅基地的供应商 ID,我使用了以下查询:
select supplierid from suppliers
where companyname ='Grandma Kelly''s'' Homestead'
Run Code Online (Sandbox Code Playgroud)
我检查了在 SQL Server 中转义单引号的链接,但找不到答案。
我使用了两个单引号但它不起作用,因为查询正在执行但它没有返回值。
如何转义单引号并检索值?我还想知道如何将值插入带有引号的表中
sql-server ×10
t-sql ×4
select ×2
constraint ×1
index ×1
like ×1
performance ×1
primary-key ×1
query ×1
statistics ×1