2015-10-15 88 views
0

類似的問題已被要求​​,但我會給一個簡短的介紹。 在SQL Server中有3個表格:MDX交叉路口 - 如何?

  1. Order(Id,Date);
  2. 產品(Id,Name);
  3. OrderRefProduct(Id,OrderId,ProductId);

OrderRefProduct是一個多對多的表格,因爲一個產品可以有不同的順序,不同的產品可以是一個順序。

所有這些都被粘貼到OLAP多維數據集中,訂單和產品作爲維度和OrderRefProduct作爲事實。我們需要得到這樣的SQL查詢的輸出結果將提供:

SELECT ProductId, COUNT(*) as [Count] 
FROM OrderRefProduct 
GROUP BY ProductId 

的correspondind MDX查詢是相當簡單的,給出的立方體正確建:

SELECT 
NON EMPTY { [Measures].[Order Ref Product Count] } ON COLUMNS, 
NON EMPTY { ([Product].[Product ID].[Product ID].ALLMEMBERS) } ON ROWS 
FROM [Sales] 

而且兩者的結果是:

ProductId Count 
1 7 
2 7 
3 5 
4 6 

現在,這裏的問題。 我要選擇有兩種產品3和4 SQL訂單數:

select ProductId, Count(*) as [Count] 
from OrderRefProduct 
where [OrderId] in 
(SELECT S.OrderID FROM 
(select * from OrderRefProduct where ProductID=3) as S 
INNER JOIN (select * from OrderRefProduct where ProductID=4) as T on T.OrderId = S.OrderID) 
Group by ProductId 

結果:

ProductId Count 
1 1 
2 1 
3 3 
4 3 

不能在MDX查詢重現此。到目前爲止我所能達到的是FULL JOIN,而我需要一個INNER。 任何幫助,將不勝感激。 測試溶液可以找到here

回答

0

換言之,只需在where子句中添加多重選擇是OR。你想要一個AND過濾器。試試這個:

WITH 
MEMBER [Measures].[HasBothProducts] as 
IIf(
    ([Product].[Product ID].&[3], [Measures].[Order Ref Product Count]) > 0 
And ([Product].[Product ID].&[4], [Measures].[Order Ref Product Count]) > 0 
,1 
,Null 
) 
SELECT 
{ [Measures].[Order Ref Product Count] } ON COLUMNS, 
NON EMPTY { ([Product].[Product ID].[Product ID].ALLMEMBERS) } ON ROWS 
FROM [Sales] 
WHERE NonEmpty([Order].[Order ID].[Order ID].Members, [Measures].[HasBothProducts])