【发布时间】:2014-12-12 02:04:45
【问题描述】:
在 MS-SQL 中,我有一个视图“ListingResult”,其中包含表“ListingCategoryXref”和“Listing”中的行。这是视图语句:
SELECT
dbo.Listing.ListingName,
dbo.Listing.ListingId,
dbo.ListingCategoryXref.CategoryId
FROM dbo.Listing INNER JOIN
dbo.ListingCategoryXref ON dbo.Listing.ListingId = dbo.ListingCategoryXref.ListingId
GROUP BY
dbo.Listing.ListingName,
dbo.Listing.ListingId,
dbo.ListingCategoryXref.CategoryId
因此,ListingCategoryXref 中的列表可以有很多行。
ListingResult (View)
Listing (table)
ListingId ListingName StateId
1 Toms bar 3
2 French place 5
ListingCategoryXref (table)
ListingId CategoryId
1 10
1 15
下面的查询根据 ListingCategoryXref 每个列表返回一行。
SELECT TOP(26)
[ListingResult].[ListingId],
[ListingResult].[ListingName]
FROM [ListingResult]
WHERE [ListingResult].[StateId] = 3
所以“Tom's Bar”返回两次,因为它有两个类别。我想我可以更改上面的查询,或者更改 SQL 中的 ListingResult 视图。我仍然需要返回 26 个结果,如果我使用带有 ROW_NUMBER() OVER(PARTITION BY ListingId 的包装选择语句,我无法指定这些结果。 (这是真的吗?)我正在使用 LLBLGen 访问数据库,所以如果可能的话,我更愿意更改视图?很抱歉我对 SQL 的了解如此明显。
【问题讨论】:
-
嘿@Rufyan,我不太确定你在问什么 - 请你澄清一下吗?
-
您认为 GROUP BY 的目的是什么?它与 SELECT 完全匹配,并且似乎不会做任何事情。
-
@JohnLBevan 我的问题是如何只返回列表表中每条记录的一个实例。
-
@RobP 我离开了小组,因为我使用的示例是来自 Design in SSMS 的编辑版本。这会混淆问题吗?
-
@wewestthemenace 任何实例 - 我实际上并没有使用此特定查询返回任何 ListingCategory 数据。
标签: sql-server llblgenpro