如何从2个表根据唯一值的列在一个表
问题描述:
我有2个表选择: 一(案件) 二(评论)如何从2个表根据唯一值的列在一个表
在一对多的关系;我将每个案例的评论存储在评论表中。
,我需要选择从在评论表呈现案件表情况的信息,但我想可以通过添加注释日期(CDATE)
显示一次订购的每个情况下,我尝试:
SELECT TOP 10
Cases.*,
comments.cDate
FROM
Cases
INNER JOIN comments
ON Cases.Case_ID = comments.Case_ID
WHERE comments.Case_ID IN
(
SELECT DISTINCT
Case_ID
FROM
comments
)
ORDER BY cDate DESC
但它多次检索该案例,如果它有很多评论。我需要它出现一次只能
谢谢大家,你们很多帮助,, 我只是说
Cases.Case_ID IN (SELECT Case_ID FROM comments)
它完美地工作。
Select语句是现在这个样子:
SELECT top 10 Cases.*,
(SELECT MAX(comments.cDate)
FROM comments
WHERE Cases.Case_ID = comments.Case_ID ) AS cDate
FROM Cases
WHERE Cases.Case_ID
IN (SELECT Case_ID FROM comments)
ORDER BY cDate DESC
再次谢谢:)
答
谢谢大家,你们很多帮助,,我只是说
Cases.Case_ID IN (SELECT Case_ID FROM comments)
它完美地工作。
Select语句是现在这个样子:
SELECT top 10 Cases.*,
(SELECT MAX(comments.cDate)
FROM comments
WHERE Cases.Case_ID = comments.Case_ID ) AS cDate
FROM Cases
WHERE Cases.Case_ID
IN (SELECT Case_ID FROM comments)
ORDER BY cDate DESC
再次感谢:)
+0
至少,您可以对所有帮助您达到此解决方案的答案进行回复。谢谢。 – Kev 2012-03-04 08:54:56
答
在这种情况下,它看起来像你想使用子查询:
SELECT top 10 Cases.*,
(SELECT MAX(comments.cDate) FROM comments
WHERE Cases.Case_ID = comments.Case_ID) AS cDate
FROM Cases
ORDER BY cDate DESC
答
这将做:
SELECT TOP 10
A.* ,
(SELECT MAX(C.cDate) FROM comments C WHERE C.Case_ID = A.Case_ID) commDate
FROM Cases A
INNER JOIN comments B ON A.Case_ID = B.Case_ID
ORDER BY commDate
(@ yhw42查询将返回它们没有什么意见,以及案件。)
答
首先是一些测试数据:
DECLARE @tblCases TABLE(Case_ID INT)
DECLARE @comments TABLE(Case_ID INT,cDate DATETIME)
INSERT INTO @tblCases
SELECT 1 UNION ALL SELECT 2
INSERT INTO @comments
SELECT 1,GETDATE() UNION ALL
SELECT 1,GETDATE()-1 UNION ALL
SELECT 2,GETDATE()-2 UNION ALL
SELECT 2,GETDATE()-3
话,我会做这样的。
;WITH CTE AS
(
SELECT
RANK() OVER(PARTITION BY Case_ID ORDER BY cDate DESC) AS iRank,
tbl.cDate,
tbl.Case_ID
FROM
@comments AS tbl
)
SELECT TOP 10
Cases.*,
CTE.cDate
FROM
CTE
JOIN @tblCases AS Cases
ON Cases.Case_ID=CTE.Case_ID
WHERE
CTE.iRank=1
你想每箱最新评论? – Arion 2012-02-05 15:12:14
是的,我需要得到最近讨论的案例 – Meensat 2012-02-05 20:34:50