0

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

Table1 和 ColumnNM 表
2 和 ColumnDESC

主键是 ColumnID

每个 ColumnNM 都有多行 ColumnDESC。所以我必须以以下格式显示:

ColumnID ColumnNM
------------------
列DESC
列DESC
列DESC
列DESC

ColumnID ColumnNM
------------------
列DESC
列DESC

ColumnID ColumnNM
------------------
列DESC
列DESC
列DESC

我必须将结果显示为文本,而不是网格。关于如何做到这一点的任何建议?我必须将其创建为存储过程。任何帮助表示赞赏。据我所知,以下是:

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

但我想我已经走了。

.............................好的,编辑,在约翰 Tabernik 建议之后我懂了......................................

(PS很抱歉在您的答案中添加评论,只是学习如何使用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   |
4

2 回答 2

1

与标题和“-------”行分开的部分有多重要?简单的 SQL 不会这样做,但如果结果可以全部放在一起并简单地排序,那真的很容易。

你只想要这样的东西:

SELECT column1, column2
FROM table1 T1
    JOIN table2 T2
          on T1.id = T2.foreignkey
ORDER BY column1, column2

您可以利用提取此数据的任何内容对其进行格式化,但这种通用方法将为您提供数据,并按照您想要的方式进行排序。祝你好运!

于 2013-08-19T20:28:20.957 回答
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
于 2013-08-29T13:36:05.253 回答