2013-09-28 26 views
0

我的問題的第一個版本令人困惑,我需要製作更小的塊。 如果用戶可以從網站過濾產品,則一個產品只能在列表中出現一次。 由於加入此代碼給了我兩個相同的產品,我該如何解決? 我想我需要一個解決方案,而不使用不同的,因爲它會稍後給我頭痛。從AW2012當過濾和使用動態順序獲取不同的行

代碼:



    declare @safetystocklevel int 
    set @safetystocklevel = 1000 
    declare @status int 
    set @status = 2 

    select * from Production.Product p 
    inner join Purchasing.ProductVendor pv on p.ProductID = pv.ProductID 
    inner join Purchasing.Vendor v on v.BusinessEntityID = pv.BusinessEntityID 
    inner join Production.ProductDocument pd on p.ProductID = pd.ProductID 
    inner join Production.Document d on d.DocumentNode = pd.DocumentNode 
    WHERE 
    (@safetystocklevel = '' or p.SafetyStockLevel = @safetystocklevel) 
    and (@status = '' or d.Status = @status) 

輸出:
產品編號名稱
506反射
506反射

編輯:

謝謝,我現在用的集團通過獲得不同的行。 是啊,也許使用組通過對我的作品,我也會盡現了一些測試.....

嗨再次

我希望所有的產品要搜索的,所以我想我需要左外連接來實現那。 當我加入動態訂單時遇到麻煩,會添加更多行。 可能是因爲我必須將poh.Status添加到羣組中。 產品表中有504行,此查詢返回776行。 (我已刪除在WHERE過濾,因爲它是不是有趣,現在,林加入到其它表,現在只是爲了獲得更多的行一起玩)

代碼:



    declare @sortType nvarchar(50) 
    set @sortType = 'Status' 
    select p.ProductID, 
    CASE WHEN @sortType = 'Status' THEN poh.Status END as Status, 
    CASE WHEN @sortType = 'ProductId' THEN p.ProductID END as ProductId 
    from Production.Product p 
    left outer join Purchasing.PurchaseOrderDetail pod on p.ProductID = pod.ProductID 
    left outer join Purchasing.PurchaseOrderHeader poh on poh.PurchaseOrderID = pod.PurchaseOrderID 
    left outer join Production.ProductDocument ppd on ppd.ProductID = p.ProductID 
    left outer join Production.Document pd on pd.DocumentNode = ppd.DocumentNode 
    group by p.ProductID, poh.Status 
    ORDER BY 
     CASE WHEN @sortType = 'Status' THEN poh.Status END ASC, 
     CASE WHEN @sortType = 'ProductId' THEN p.ProductID END ASC 

+0

你能澄清一下你的問題嗎?目前尚不清楚你想要達到什麼目標。你可能會展示一個(大概是手工製作的)表格,顯示你希望得到的數據(一些)? – 2013-09-28 20:34:45

+0

嗨,我已經更新了問題 –

+0

@CliffSmith,我想因爲你使用的是不同的,那麼其中一個表是1-n,那麼哪一個呢?我的意思是,什麼導致結果集有多個產品行,哪裏只需要一個? – mewm

回答

1

您可以使用組通過ProductId,Name來選擇單行,如果你不打算包含distinct。但是如果你在select子句中沒有使用任何聚合值,我會更喜歡「distinct」。

select p.ProductId, p.Name from Production.Product p 
inner join Purchasing.ProductVendor pv on p.ProductID = pv.ProductID 
inner join Purchasing.Vendor v on v.BusinessEntityID = pv.BusinessEntityID 
inner join Production.ProductDocument pd on p.ProductID = pd.ProductID 
inner join Production.Document d on d.DocumentNode = pd.DocumentNode 
WHERE 
(@safetystocklevel = '' or p.SafetyStockLevel = @safetystocklevel) 
and (@status = '' or d.Status = @status) 
GROUP BY p.ProductId, p.Name 
+0

謝謝,我編輯了我的問題。 –

+0

如果Group BY條款適用於您,請您接受答案並進行投票。 – Viji

+0

您是否看到我上次更新? –