【问题标题】:Cursor get temp/result table光标获取温度/结果表
【发布时间】:2021-04-05 18:34:25
【问题描述】:

我在这个主题中有讲师表、他们的科目和经验:

Full Name varchar(30)
Experience int
Subj varchar(10)

我必须为每个主题获取 exp % 5 = 0 的讲师序列,用逗号分隔。喜欢

subj names tuple
subj1 lecturer_name1, lecturer_name2, ...
subj2 lecturer_name1, lecturer_name2, ...
subj3 lecturer_name1, lecturer_name2, ...
CREATE PROCEDURE get_unqualified_lectures
AS

DECLARE @subj varchar(10)

DECLARE my_cur CURSOR FOR
    SELECT DISTINCT(subj) FROM Lecturers

OPEN my_cur
DECLARE @res_table TABLE (subj varchar(20), names varchar(max))
DECLARE names_tupple varchar(max)
FETCH NEXT FROM my_cur INTO @subj

WHILE @@FETCH_STATUS = 0
BEGIN

    SELECT @names_tupple = FullName FROM Lecturers WHERE Experience % 5 = 0

    // I have no idea how to concat the names

    INSERT INTO @res_table VALUES(@subj, @names_tupple)

    FETCH NEXT FROM my_cur INTO @subj
END

CLOSE my_cur
DEALLOCATE my_cur
GO

你会推荐如何正确修改它,或者比我想出的更好的东西吗?

注意:我可能错过了什么或做错了什么。没有经过测试,我只是用纸和笔。

【问题讨论】:

    标签: sql sql-server tsql cursor


    【解决方案1】:

    根据您的 SQL 版本,您可以将其放在光标内以连接名称。您需要使用它来获得subj 的原始参考。

    SELECT STUFF((
        SELECT ',' + names
        FROM @res_table
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
    

    编辑:

    对于 SQL Server 2017 及更高版本,您可以使用它,这也可以获得subj 参考。

    SELECT subj,STRING_AGG( ISNULL(names, ' '), ',') As names_tupple 
           From @res_table
    GROUP BY subj
    

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 2020-06-29
      • 2014-06-12
      • 2012-09-03
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多