2016-09-06 71 views
0

我不確定如何爲此編寫查詢。雖然做了幾個谷歌的東西,我發現解決方案是使用數據透視表,但不知道如何應用於我的表。在SQL Server中顯示幾行爲列

我有3個表TableDateTableMembersSales

我需要加入3個表,並得到下面的結果。

我原來的查詢看起來像

SELECT [Member No], [Full Date],[Member State], SUM([Net Sales]) as Netsales 
FROM (([TableMembers] inner join [TableDate] 
on [TableMembers].DateKey = [TableDate].DateKey) 
inner join [Sales] 
on [TableMembers].RID = [Sales].RID) 
where [Full Date] between '2014-01-01' and '2015-05-05' 

group by [Member No], [Full Date],[Member State] 
order by [Full Date] 

注意:第一部分是原來的結果,和圖像的第二部分是我的結果。我還需要提供一個條件,只允許年份爲2013,2014

IMAGE

+0

還有,你試過嗎?顯示一些努力! – gofr1

+0

請包括您的表的詳細信息 - 列名是什麼?我們加入3張桌子?你想要什麼樣的輸出方式?那天的總和?那個日期的平均值?不要使用圖片,請寫出你的表格和數據,這樣我們就可以在我們寫答案時複製粘貼。 – BeanFrog

回答

0

對於示例,您可以使用下面SQL Pivot query

select 
    * 
from 
(
    select 
    member, date, state, net 
    from tblSource 
) SourceTable 
PIVOT 
(
    SUM(net) 
    FOR date 
    IN (
    [29-02-2013],[30-05-14] 
) 
) PivotTable 

但當然我們必須擴大查詢所有日期 這就需要建設上面的SQL支點查詢作爲一個動態SQL樞軸查詢 如果您參考引用的SQL教程,我們可以按如下方式構建它:

DECLARE @Dates VARCHAR(MAX) 
SELECT @Dates = 
    COALESCE(
    @Dates + ',[' + cast([date] as varchar) + ']', 
    '[' + cast([date] as varchar)+ ']' 
) 
FROM tblSource 

DECLARE @PivotSQL NVARCHAR(MAX) 
SET @PivotSQL = N' 
select 
    * 
from 
(
    select 
    member, date, state, net 
    from tblSource 
) SourceTable 
PIVOT 
(
    SUM(net) 
    FOR date 
    IN (
' + @Dates + ' 
    ) 
) AS PivotTable 
' 

EXECUTE(@PivotSQL) 

輸出如下

enter image description here

+0

嗨Eralper,謝謝,但如果我想要一個像2013年至2015年之間的所有日期範圍的日期? – Shivang

+0

肯定是因爲這個原因,你需要使用動態SQL查詢。輸出是兩個日期,因爲我只有兩行。任何附加日期將顯示爲帶Pivot的第二個SQL Select查詢的輸出中的新列 – Eralper