2016-08-24 58 views
0

我有兩個查詢。一個查詢根據員工一天中安排給他們的訂單來提取信息。另一個查詢抽取一天內完成並支付的訂單數量,以及訂單收入總額。如何在SQL Server 2012中加入兩個select查詢

我已經颳了論壇來獲取這些代碼,以獲得這些查詢,但我需要將兩個查詢連接在一起。一旦完成,我想在報告生成器中使用這些信息。對某人來說可能很簡單,但是這讓我感到困惑,因爲我遠離任何一位SQL專家。

我現在只需要一天,但是現在發現了這個代碼並進行了修改,並希望在將來需要一週和一個月的數據時可以使用它。

任何幫助,將不勝感激。

查詢1個

declare @dt DATE = '20160823' 
set DATEFIRST 7; 
set @dt = dateadd(week, datediff(week, '19050101', @dt), '19050101'); 

;with dt as 
(
    select 
     Technician = (CASE emp_id 
         WHEN 'CW697' THEN 'Joe Biggs' 
         WHEN 'DZ663' THEN 'Mimi Cassidy' 
         END), 
     dw = datepart(weekday, DATE) 
    from 
     dbo.ordemps 
    where 
     date >= @dt and date <dateadd(day, 7, @dt) 
), 
x AS 
(
    select 
     Technician, dw = coalesce(dw,8), 
     c = convert(varchar(11), COUNT(*)) 
    from 
     dt 
    group by 
     grouping sets((Technician), (Technician,dw)) 
) 
select 
    Technician, 
    [Sun] = coalesce([1], '-'), 
    [Mon] = coalesce([2], '-'), 
    [Tue] = coalesce([3], '-'), 
    [Wed] = coalesce([4], '-'), 
    [Thu] = coalesce([5], '-'), 
    [Fri] = coalesce([6], '-'), 
    [Sat] = coalesce([7], '-'), 
    TOTAL =[8] 
from 
    x 
PIVOT 
    (MAX(c) FOR dw IN([1],[2],[3],[4],[5],[6],[7],[8])) as pvt; 

查詢2

select 
    case 
     when grouping(d.m)=15 then 'Year ' + cast(max(d.y) as varchar(10)) 
     when grouping(date)=15 then datename(m, max(DATE)) + ' ' + cast(max(d.y) as varchar(10)) 
     else cast(cast([date] as date) as varchar(255)) 
    end as DATE, 
    TotalOrders = /*sum(Amount)*/convert(varchar(11), COUNT(*)), 
    TotalSales = sum(Amount), 
    Technician = (CASE recv_by 
        WHEN 'CW697' THEN 'Joe Biggs' 
        WHEN 'DZ663' THEN 'Mimi Cassidy' 
        END) 
from 
    ordpay 
cross apply 
    (select 
     datepart(yy, [date]), 
     datepart(m, [date]) 
    ) d(y, m) 
where 
    [DATE] >= dateadd(day, datediff(day, 1, getdate()), 0) 
    and [date] < dateadd(day, datediff(day, 0, getdate()), 0) 
group by 
    recv_by, d.y, rollup (d.m, date) 
order by 
    d.y desc, grouping(d.m), d.m, grouping(DATE), DATE 
+4

歡迎的StackOverflow(SO)!儘管我們享受互相幫助,但我們不是代碼寫作服務。爲這個問題付出一些努力,並試圖找出答案。當你有問題時,尋求幫助。通常這些問題由於沒有問題被問到而關閉,並且在問題部分顯示的努力不足。我們不會這麼做是卑鄙或殘酷的,但是因爲那些編寫/維護這些代碼的人應該表現出一些努力,而其他人則爲此類工作獲得報酬! – xQbert

+0

對不起,如果我遇到了,就好像我只是要求某人爲我寫軟件一樣。我一直在努力解決這個問題一整天。我已經在這裏看過很多帖子,但還沒有完全掌握需要什麼。所以,我決定在這裏發佈一個問題,在一天之後我的腦袋裏敲了一下。 – mistrfree

+1

如果您提供一些代碼來生成輸入數據並且告訴我們期望的結果是什麼,那將會容易得多。只需添加一個創建表和一些插入語句,以便我們可以使用它來生成示例數據。順便說一句,我認爲這可能是一個有效的問題,值得努力。 – FLICKER

回答

2

在可以使用可以加入子查詢最簡單的水平。你的例子有點棘手,因爲你正在使用不能進入子查詢的CTE。爲了讓你在正確的方向前進,通常應該是這樣的:

with cte1 as(), 
cte2 as() 
select * 
from (
    select * 
    from tables 
    where criteria -- subquery 1 (cannot contain order by) 
) a 
join ( -- could be a left join 
    select * 
    from tables 
    where criteria -- subquery 2 (cannot contain order by) 
) b 
on b.x = a.x --join criteria 
where --additional criteria 
order by --final sort 

,其中子查詢1將您的查詢1從select Technician到底 和子查詢2將是一切從您的查詢2除了order by

有關更多信息,加入看到MSDN文檔

+0

感謝您的提示。這是正確的方向。我仍然需要做一些調整,但你的提示真的幫助我分配。 – mistrfree

0

既然你不打算研究多似乎並不在這裏是一個笨拙的,快捷的方式,並保持它簡單的你,而無需解釋如果我們更加優雅地將這些問題結合在一起的話。

第一組代碼有2個公用表表達式(CTE)。所以,選擇這些結果到一個溫度。請注意這裏的--addition

.... 
select 
    Technician, 
    [Sun] = coalesce([1], '-'), 
    [Mon] = coalesce([2], '-'), 
    [Tue] = coalesce([3], '-'), 
    [Wed] = coalesce([4], '-'), 
    [Thu] = coalesce([5], '-'), 
    [Fri] = coalesce([6], '-'), 
    [Sat] = coalesce([7], '-'), 
    TOTAL =[8] 
into #someTemp      --Addition here 
from 
.... 

做同樣的你的第二個查詢...

... 
into #someOtherTemp     --Addition here 
from 
    ordpay 
... 

然後togehter加入他們的行列......

select t1.someColumns, t2.someOtherColumns 
from #someTemp t1 
inner join #someOtherTemp t2 on t1.column = t2.column