在一列中连接表并将结果显示为文本

时间:2013-08-19 20:19:50

标签: sql

我需要从两个表中连接两列并按特定顺序显示它们

表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   |

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