SQL语句练习

亦凉 2023-11-05 06:25 212阅读 0赞

一.通过Sql实现根据分组合并指定列内容的查询

问题:

  最近在做一个项目的时候,遇到这样一个要求,模拟要求如下:  

  1. ID SName
  2. 1 张三
  3. 1 李四
  4. 2 刘六
  5. 2 王五
  6. 要的结果是
  7. ID name
  8. 1 张三,李四
  9. 2 刘六,王五
  10. 即按ID组查询,并将相同的ID对应SName内容通过逗号合并

解决思路:

  通过传递不同的id给函数,查询出组合的SName并返回。

  1. --创建测试表
  2. IF NOT EXISTS(SELECT * FROM sysobjects WHERE id=OBJECT_ID(N'StudentsInfo') AND OBJECTPROPERTY(id,N'IsUserTable')=1)
  3. CREATE TABLE StudentsInfo
  4. (
  5. Id INT,
  6. SName NVARCHAR(20)
  7. )
  8. GO
  9. --添加测试数据
  10. INSERT INTO StudentsInfo VALUES (1,'张三')
  11. INSERT INTO StudentsInfo VALUES (1,'李四')
  12. INSERT INTO StudentsInfo VALUES (2,'刘六')
  13. INSERT INTO StudentsInfo VALUES (2,'王五')
  14. GO
  15. --创建函数
  16. IF EXISTS(SELECT * FROM sysobjects WHERE id=OBJECT_ID(N'GetStudentsInfoNamesByID') AND OBJECTPROPERTY(id,N'IsScalarFunction')=1)
  17. DROP FUNCTION GetStudentsInfoNamesByID
  18. GO
  19. CREATE FUNCTION GetStudentsInfoNamesByID(@Id INT)
  20. RETURNS NVARCHAR(4000)
  21. AS
  22. BEGIN
  23. DECLARE @SNames NVARCHAR(4000)
  24. SET @SNames = ''
  25. SELECT @SNames = @SNames+','+SName FROM StudentsInfo WHERE id = @Id
  26. RETURN STUFF(@SNames,1,1,'')
  27. END
  28. GO
  29. --查询
  30. SELECT id,dbo.GetStudentsInfoNamesByID(id) AS SNames FROM StudentsInfo GROUP BY id

发表评论

表情:
评论列表 (有 0 条评论,212人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SQL语句练习

    一.[通过Sql实现根据分组合并指定列内容的查询 ][Sql_] 问题:   最近在做一个项目的时候,遇到这样一个要求,模拟要求如下:   ID SName

    相关 Oracle sql语句练习

    在网上找的 Oracle sql语句练习 终于磕磕绊  绊的做完了!!!! \--1、查询“c001”课程比“c002”课程成绩高的所有学生的学号; select