【问题标题】:Sql server 2008数据库服务器 2008
【发布时间】:2018-07-05 10:37:40
【问题描述】:
SELECT 'Values ("'+ S.enroll_no +'",'+ Pm.periodname COLLATE DATABASE_DEFAULT +'),'
FROM   studentattendencedetails AS SA 
      LEFT JOIN studentattendencemaster AS SM 
         ON SA.attendencemasterid = SM.id 
      LEFT JOIN tbl_periodmaster AS Pm 
         ON SA.periodid = Pm.id 
      LEFT JOIN students AS S 
         ON SA.studentid = S.id 
WHERE  SA.isabsent = 2 
ORDER  BY S.enroll_no

输出:

ColumnName
Values ("XXXXXX",2),
Values ("XXXXXX",1),
Values ("YYYYYYY",2),
Values ("YYYYYYY",1),

但我只想为列表中的第一行添加“值”,如下所示,并且需要从最后一行中删除“,”。

所需输出:

ColumnName
Values ("XXXXXX",2),
("XXXXXX",1),
("YYYYYYY",2),
("YYYYYYY",1)

【问题讨论】:

  • 我猜这个问题与你几个小时前问的这个问题有关。 stackoverflow.com/questions/51184828/… - 既然已经拥有这些值,为什么还要让它们动态化?你不能只使用 INSERT INTO dbo.XXXX Select Yourcolumns from XXXX
  • 您正在为连接准备列,这是不必要的。当需要连接时,只需按照 Gordon Linoff 在 Thomas 提到的另一篇文章中的回答使用 'Values' + stuff(.....)。这将在开头有值,最后没有逗号。

标签: sql sql-server


【解决方案1】:

尝试使用这个。

with cte as (SELECT row_number() over(partition by enroll_no ORDER BY S.enroll_no) rn, S.enroll_no +'",'+ Pm.periodname COLLATE DATABASE_DEFAULT +'),' long_string FROM studentattendencedetails AS SA LEFT JOIN studentattendencemaster AS SM ON SA.attendencemasterid = SM.id LEFT JOIN tbl_periodmaster AS Pm ON SA.periodid = Pm.id LEFT JOIN students AS S ON SA.studentid = S.id WHERE SA.isabsent = 2) select case when rn = 1 then 'Values ("'+ cte.long_string else cte.long_string end from cte

【讨论】:

    猜你喜欢
    • 2010-09-28
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多