我在SQL Server中有两个表(我删除了很多行,但它不应该影响结果):
[DBO] [订购]:
CaseId Gender
-----------------
698 Female
694 Male
676 Female
659 Male
[DBO] [Plimplan]:
OrderID CaseID InfoID
--------------------------------------------
33425999 698 BBBBBE
33425984 694 AAAAAS
33425984 694 DSSSAS
33425609 694 BBBBBA
33425270 676 AAAAAA
33424973 676 AAAAAD
33424716 676 SASSAS
33424704 676 AAAAAA
33424500 676 BBBBBE
33424340 659 AAAAAA
33424281 659 BBBBBD
我希望获得以下内容:
[DBO] [Plimplan]:
OrderID CaseID InfoID Gender
----------------------------------------------------
33425984 694 AAAAAS Male
33425270 676 AAAAAA Female
33424340 659 AAAAAA Male
让我们忘记加入。我可以从[dbo]中删除不需要的行。[Order]用这个:
SELECT TOP (100) MAX (OrderID) AS [OrderID]
,MAX (CaseID) AS [CaseID]
,MAX (InfoID) AS [InfoID]
/*,[Gender]*/
FROM [dbo].[Plimplan] as Plimpl
/* INNER JOIN [dbo].[Order] as Ord
ON Plimpl.CaseID = Ord.CaseID */
WHERE [InfoID] NOT LIKE 'BBBBB%'
and CaseID < 700
and CaseID > 600
GROUP BY (CaseID)
order by CaseID desc
但如果删除评论以完成加入,我会收到此错误:
Msg 209,Level 16,State 1,Line 3 不明确的列名称&#39; CaseID&#39;。
答案 0 :(得分:3)
使用别名。您获得的错误是由于联接中的两个表都有CaseID
列。 SQL Server告诉您,它无法找出您想要选择的 。
SELECT TOP 100
MAX (Plimpl.OrderID) AS [OrderID]
MAX (Plimpl.CaseID) AS [CaseID]
MAX (Plimpl.InfoID) AS [InfoID]
FROM [dbo].[Plimplan] AS Plimpl
INNER JOIN [dbo].[Order] AS Ord
ON Plimpl.CaseID = Ord.CaseID
WHERE
Plimpl.[InfoID] NOT LIKE 'BBBBB%' AND
Plimpl.CaseID < 700 AND
Plimpl.CaseID > 600
GROUP BY
Plimpl.CaseID
ORDER BY
Plimpl.CaseID DESC;
您曾在Gender
表格中选择了Order
列,但您在使用GROUP BY
时这样做是没有意义的。
答案 1 :(得分:2)
当您取消注释JOIN语句时,您收到错误了吗?
使用别名
SELECT TOP (100) MAX (OrderID) AS [OrderID]
,MAX (CaseID) AS [CaseID]
,MAX (InfoID) AS [InfoID]
/*,[Gender]*/
FROM [dbo].[Plimplan] as Plimpl
INNER JOIN [dbo].[Order] as Ord
ON Plimpl.CaseID = Ord.CaseID
WHERE [InfoID] NOT LIKE 'BBBBB%'
and Plimpl.CaseID < 700
and Plimpl.CaseID > 600
GROUP BY Plimpl.CaseID
order by Plimpl.CaseID desc