2
CREATE TABLE [dbo].[test](
[id] [bigint] IDENTITY(1,1) NOT NULL, 
[ctext] [varchar](12) NOT NULL, 
CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED 
(
[id] ASC 
)) 

CREATE TABLE [dbo].[Comments](
[id] [bigint] IDENTITY(1,1) NOT NULL, 
[cComments] [varchar](250) NOT NULL, 
[fk_test] [bigint] NOT NULL) 
GO 

ALTER TABLE [dbo].[Comments] WITH CHECK ADD CONSTRAINT [FK_Comments_test] FOREIGN KEY([fk_test]) 
REFERENCES [dbo].[test] ([id]) 
ON DELETE CASCADE 

两个表与一个正常的一对多关系链接。Sql:从两个表中选择数据而不重复第一个表值?

我想选择返回一个列表的列表:

----------------------------------------------------- 
|test.id|test.cnumber|comments.id|comments.cComments| 
|-------|------------|-----------|------------------| 
| 1  | mytest1 |  1  | comment1  | 
|  |   |  2  | comment2  | 
|  |   |  3  | comment3  | 
|  |   |  4  | comment4  | 
|  |   |  5  | comment5  | 
|  |   |  6  | comment6  | 
| 2  | mytest2 |  7  | comment7  | 
|  |   |  8  | comment8  | 
| 3  | mytest3 |  7  | comment9  | 
----------------------------------------------------- 

反正是有办呢?

即时通讯尝试用sql存储过程替代linq。

+4

也许你应该这样做在应用层。在oracle中 – 2013-04-10 12:17:36

+0

,你会用一个LAG函数 – Randy 2013-04-10 12:35:13

+0

哪个SQL Server版本? 2012还支持'lag()'函数。 – 2013-04-10 12:44:08

回答

2

尝试这种解决方案 -

DECLARE @test TABLE 
(
    [id] [bigint] IDENTITY(1,1) NOT NULL 
, [ctext] [varchar](12) NOT NULL 
) 

DECLARE @Comments TABLE 
(
[id] [bigint] IDENTITY(1,1) NOT NULL, 
[cComments] [varchar](250) NOT NULL, 
[fk_test] [bigint] NOT NULL 
) 


INSERT INTO @test (ctext) 
VALUES ('1'), ('2') 

INSERT INTO @Comments (cComments, fk_test) 
VALUES ('123', 1), ('123', 1), ('123', 2), ('123', 2) 

SELECT id = CASE WHEN d.rcount = 1 THEN d.id END 
, cnumber = CASE WHEN d.rcount = 1 THEN d.cnumber END 
, d.commentid 
, d.cComments 
FROM (
SELECT 
    t.id 
, cnumber = t.ctext 
, commentid = c.id 
, c.cComments 
, rcount = ROW_NUMBER() OVER (PARTITION BY t.[id] ORDER BY t.[id] DESC) 
FROM @test t 
JOIN @Comments c ON t.id = c.fk_test 
) d 
+0

@MFFuzzyButton - 评论2有一个无效的fk_test,即您的设置是错误的。 – muhmud 2013-04-10 13:01:50

+0

@Mr模糊按钮我写了一个表变量,只是作为例子。在user1958148的问题中描述了表之间的外键。因此,你描述的情况永远不会发生。 – Devart 2013-04-10 13:15:36