我需要从两个表中连接两列并按特定顺序显示它们
表1和ColumnNM
表2和ColumnDESC
主键是ColumnID
每个ColumnNM都有多行ColumnDESC。所以我必须以下列格式显示:
ColumnID ColumnNM ------------------- ColumnDESC ColumnDESC ColumnDESC ColumnDESC ColumnID ColumnNM ------------------- ColumnDESC ColumnDESC ColumnID ColumnNM ------------------- ColumnDESC ColumnDESC ColumnDESC
我必须将结果显示为文本而不是网格。有关如何做到这一点的任何建议? 我必须将其创建为存储过程。任何帮助表示赞赏。以下是我得到的:
DECLARE @Name nvarchar(max),
@Lesson nvarchar(max),
@lb nvarchar(max)
SET @lb = '----------------------------------------------------'
SELECT @Name = Module.Name
FROM Module
JOIN Lesson ON Module.ModuleSequence = Lesson.ModuleSequence
WHERE Module.ModuleSequence = 1
PRINT '1 ' + @Name
PRINT @lb
SELECT Lesson.Description
FROM Module
JOIN Lesson ON Module.ModuleSequence = Lesson.ModuleSequence
WHERE Module.ModuleSequence = 1
但我想我离开了。
..........................................好的,编辑,之后John Tabernik的建议我得到了......................................
(P.S。抱歉为你的答案添加评论,只是学习如何使用stackoverflow)
SELECT M.Name, L.Description
FROM Module M
JOIN Lesson L
ON M.ModuleSequence = L.ModuleSequence
ORDER BY M.Name, L.Description
我最终得到M.Name重复了四次,因为第一个M.Name有四个不同的L.Description,而所有其他M.Name都有不同的数量。
示例:
M.Name | L.Description
-----------------------------
A | 1
A | 2
A | 3
B | 1
B | 2
C | 1
C | 2
C | 3
但我需要它输出这样:
A |
-----
1 |
2 |
3 |
B |
-----
1 |
2 |
C |
-----
1 |
2 |
答案 0 :(得分:1)
用标题和“-------”行分开的部分有多重要?简单的SQL不会这样做,但如果结果可以一起排序,那么这很容易。
你只需要这样的东西:
SELECT column1, column2
FROM table1 T1
JOIN table2 T2
on T1.id = T2.foreignkey
ORDER BY column1, column2
你可以利用任何拉出这些数据来格式化它,但是这种通用方法可以获得数据,按照你想要的方式排序。祝你好运!
答案 1 :(得分:0)
抱歉有点迟到,但我已经解决了我需要的问题。我想我有点担心这个问题。尽管如此,下面是我需要的代码。希望它能激发任何有类似问题的人:
CREATE PROCEDURE ShowModuleWithLessons
@CourseID int = 0
AS
BEGIN
SET NOCOUNT ON
DECLARE @MS INT
DECLARE @ModuleCount INT
SET @MS = 0
SET @ModuleCount = (Select COUNT(Module.ModuleSequence) FROM Module WHERE Module.CourseID = @CourseID)
IF EXISTS (SELECT * FROM Module WHERE Module.CourseID = @CourseID)
BEGIN
WHILE @MS < @ModuleCount
BEGIN
SET @MS=@MS+1
DECLARE @Name nvarchar(max),
@Lesson nvarchar(max),
@CID INT
SELECT @Name = Module.Name,
@CID = @MS
FROM Module
JOIN Lesson ON Module.ModuleSequence = Lesson.ModuleSequence
WHERE Module.ModuleSequence = @MS
PRINT CONVERT(VARCHAR(2),@MS) + '. ' + @Name
SELECT Lesson.Description AS Lessons
FROM Module
JOIN Lesson ON Module.ModuleSequence = Lesson.ModuleSequence
WHERE Module.ModuleSequence = @MS
END
END
ELSE
BEGIN
PRINT 'Course with ID ' + CONVERT(VARCHAR(2),@CourseID) + ' does not exists'
END