【问题标题】:SQL SERVER STUFF FUNCTION VALUE INCREMENT COUNTERSQL SERVER STUFF FUNCTION 值增量计数器
【发布时间】:2023-03-10 11:00:02
【问题描述】:

我想在这个查询中添加计数器有什么想法吗?

SELECT 
STUFF((
    SELECT ' , vol' + counter +' : ' + t2.ViaLocValue  
    FROM Book_ViaLocat t2
    WHERE t2.BookId = t1.BookId
    FOR XML PATH (''))
  ,1,2,'') AS Names
FROM Book_ViaLocat t1
WHERE t1.BookId = '167698'
GROUP BY t1.BookId;

这样的结果 第 1 卷:java2,第 2 卷:java3,第 3 卷:java4

【问题讨论】:

  • MySQL 还是 SQL Server?不要标记不涉及的产品,尤其是在使用产品特定的东西时。
  • 将其称为“Stuff 函数”会严重忽略此代码的作用。 FOR XML PATH ('') 将多个值连接到一个逗号分隔的字符串中。 STUFF(<value>,1,2,'') 从该结果中删除前两个字符(前导逗号)。

标签: sql sql-server sql-server-2008 sql-server-2005


【解决方案1】:

使用 ROW_NUMBER():

SELECT 
STUFF((
    SELECT ' ,vol' + CAST(ROW_NUMBER() OVER (ORDER BY t2.ViaLocValue) AS VARCHAR(4))+
           ' : ' + t2.ViaLocValue  
    FROM Booking_ViaLocat t2
    WHERE t2.BookingId = t1.BookId
    FOR XML PATH (''))
  ,1,2,'') AS Names
FROM Booking_ViaLocat t1
WHERE t1.BookId = '167698'
GROUP BY t1.BookId;

【讨论】:

    【解决方案2】:

    这可以通过使用“ROW_NUMBER()”来实现,你也可以根据你的意愿对你的表值进行排序(如果你愿意,可以在 roder 上更改它).. 按照下面的代码:)

    SELECT 
    STUFF((
        SELECT ' ,vol' + ROW_NUMBER() OVER(ORDER BY t1.BookId asc) AS Row +' : ' + t2.ViaLocValue  
        FROM Booking_ViaLocat t2
        WHERE t2.BookingId = t1.BookId
        FOR XML PATH (''))
      ,1,2,'') AS Names
    FROM Booking_ViaLocat t1
    WHERE t1.BookId = '167698'
    GROUP BY t1.BookId;
    

    【讨论】:

    • 请注意,ROW_NUMBER 以 int 形式返回数据 - 需要转换为字符串
    • 不需要:/它工作正常......最好再检查一次
    • Msg 102, Level 15, State 1, Line 3 '+' 附近的语法错误。
    猜你喜欢
    • 1970-01-01
    • 2016-10-29
    • 2023-02-22
    • 2011-01-07
    • 2011-06-08
    • 2018-08-22
    • 2020-02-29
    • 2021-09-09
    • 1970-01-01
    相关资源
    最近更新 更多