2016-10-31 29 views
0

我創建的列表頁面,在這裏我有3個表使用GROUP BY從3個表

BND_Listing BND_ListingCategories 顯示信息BND_ListingJunction

結表包含ListingID &類別ID是匹配的列表是在哪些類別。

我正在使用以下select語句將這3個表中的數據拉到我網站上的網格中。

SELECT DISTINCT l.*, c.CategoryName 
FROM BND_Listing l 
    Join BND_ListingJunction j 
     on j.Junc_LID = l.LID 
    join BND_ListingCategories c 
     on c.CatId = j.Junc_CatID 
Where (c.CategoryName = '[querystring:filter-Category]' or 
        '[querystring:filter-Category]'='All') 
     and (City = '[querystring:filter-City]' or 
        '[querystring:filter-City]'='All') 
     and (Region= '[querystring:filter-State]' or 
        '[querystring:filter-State]'='All') 
     and (Country= '[querystring:filter-Country]' or 
        '[querystring:filter-Country]'='All') 
     and isnull(Company,'') <> '' 
Order by l.Company, l.LID 

下面的查詢工作正常,但因爲我有在多個類別中一些房源它複製在列表中每個類別上我的網格。

我想每次只顯示1個列表,儘管它們可能在多個類別中。

我不知道如何做到這一點。我有另一篇文章解釋我是如何得到這些的。 Eliminate duplicates in Join over 3 Tables

任何示例,洞察讚賞!

回答

1

最簡單的方法是刪除從SELECT類別:

SELECT DISTINCT l.* 

的另一種方法是保留類別名稱爲單身,並顯示倍數'Multiple'

SELECT l.company, l.LID, . . ., 
     (CASE WHEN MIN(c.CategoryName) = MAX(c.CategoryName) THEN MIN(c.CategoryName) 
      ELSE 'Multiple' 
     END) as CategoryName 
FROM . . . 
GROUP BY l.company, l.LID, . . .; 

這可以很容易地擴展到顯示兩個不同的類別,'More than 2'爲倍數。

更痛苦的方法是將類別連接在一起。

+0

當你說concatenate你的意思是我的數據手動在桌子上?或通過TSQL連接?顯示1個連接類別的記錄看起來像我正在尋找的選項。 – UserSN

+0

@AlexP。 。 。如果你有兩個以上的類別,這是一種痛苦。 –