2017-04-05 84 views
1

我有一种情况我不确定它是否可以执行。
我有两个表我需要加入并使用计数。SQL 2012将连接多个表的多个查询连接起来并统计到一个表中

表1 = “EPM_ProjectUserview”

[ProjectUID], [ProjectName], [EnterpriseProjectTypeUID](used as a filter) 

表2 = “EpmTask_UserView”

[ProjectUID],[Task_Significance], [TaskPercentCompleted] then 3 count fields 
[total Count], [Count 100% complete], Count <1005] 

这会给我的表看起来像这样
注:有一个第一列不适合项目名称

|Apps|Overall% Comp| Totl Count|100% Compl|Not 100% Comp|Overall Health| 

同一行的接口将是真实的

总体%完整和整体健康来自于摘要任务
(这是项目服务器)
ProjectUID是加入一个重点领域。

所以我有5个不同的查询,所有的工作,但当然我需要他们在1表。

查询1 - 这是项目名称projectUID和EnterpriseprojecttypeUID

SELECT [ProjectName] 
    ,[ProjectUID] 
    ,[EnterpriseProjectTypeUID] 
    FROM [dbo].[MSP_EpmProject_UserView] 
where [projectUID] not like '0000CF75-FB12-4FFC-A404-AEC4F3258A9C' 
And 
[EnterpriseProjectTypeUID] like '76194144-3CDB-E611-9419-00215A9259E8' 
order by [ProjectName] 

查询2这使我每种类型

SELECT p.[ProjectName] 
    ,T.[Task_Significance] 
-- ,T.[TaskPercentCompleted] 
    ,count (*) as [Total Count] 
    FROM [psmado].[dbo].[MSP_EpmProject_UserView] as P 
    join [PSMADO].[dbo].[MSP_EpmTask_UserView] as T 
    On T.[projectUID] = P.[projectUID] 
    where 
    ([Task_Significance] like 'App' 
    Or 
    [Task_Significance] like 'Interface') 
    Group by [ProjectName], [Task_Significance] 

查询3-下一查询的总数给我的100 %完成列

  SELECT p.[ProjectName] 
    ,T.[Task_Significance] 
-- ,T.[TaskPercentCompleted] 
    ,count (*) as [Count] 
FROM [psmado].[dbo].[MSP_EpmProject_UserView] as P 
join [PSMADO].[dbo].[MSP_EpmTask_UserView] as T 
On T.[projectUID] = P.[projectUID] 
    where T.[TaskPercentCompleted] >= 100 
    and 
([Task_Significance] like 'App' 
Or 
[Task_Significance] like 'Interface') 
    Group by [ProjectName], [Task_Significance] 

查询4 - 下一个给我的那个少一些N 100%完成

SELECT p.[ProjectName] 
    ,T.[Task_Significance] 
-- ,T.[TaskPercentCompleted] 
    ,count (*) as [Count] 
FROM [psmado].[dbo].[MSP_EpmProject_UserView] as P 
join [PSMADO].[dbo].[MSP_EpmTask_UserView] as T 
On T.[projectUID] = P.[projectUID] 
where T.[TaskPercentCompleted] < 100 
and 
([Task_Significance] like 'App' 
Or 
[Task_Significance] like 'Interface') 
Group by [ProjectName], [Task_Significance] 

查询5最后整个任务的健康和%完全来自不同的行中的表

SELECT [dbo].[MSP_EpmProject_UserView].[ProjectName] 
    ,[dbo].[MSP_EpmTask_UserView].[ProjectUID] 
    ,[dbo].[MSP_EpmTask_UserView].[TaskName] as [Name] 
    ,[dbo].[MSP_EpmTask_UserView].[TaskPercentCompleted] as [% Complete] 
    ,[dbo].[MSP_EpmTask_UserView].[Task Health] as [Health] 
    ,[dbo].[MSP_EpmTask_UserView].[Task_Significance] 
    ,[dbo].[MSP_EpmTask_UserView].[TaskOutlineNumber] 
    FROM [dbo].[MSP_EpmTask_UserView] 
    inner join [PSMADO].[dbo].[MSP_EpmProject_UserView] 
    on [dbo].[MSP_EpmTask_UserView].[projectuid] = [PSMADO].[dbo].[MSP_EpmProject_UserView].[ProjectUID] 
    where [dbo].[MSP_EpmTask_UserView].[projectUID] not like '0000CF75-FB12-4FFC-A404-AEC4F3258A9C' -- the timesheet project null 
    and [Task_Significance] like 'App Summary' 
or [Task_Significance] like 'Interface Summary' 
order by [ProjectName], [TaskOutlineNumber] 

难道这被(工会是不工作的投入一个表我)如果是这样怎么样?

感谢您的帮助

千斤顶的答案非常接近。这是我需要的: enter image description here

这就是我所得到的。你可以看到它只是重复每个部分。 (我砍掉了它的一部分,但也有36行。)

enter image description here

+0

向我们展示db架构,示例数据和预期输出。 \t请阅读[**如何提问**](http://stackoverflow.com/help/how-to-ask) \t \t这里是一个伟大的地方[** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)来了解如何提高您的问题质量并获得更好的答案。 –

+0

什么意思'这些可以放在一张桌子上吗? –

回答

1

最好的和你在这里最简单的方法是使用..公用表表达式.. 它不是让我所有粘贴你在这个表达式中的代码,但你可以使用下面的语法来做到这一点非常简单。

;与T1作为(这些括号内粘贴1日足本), T2因为(这些括号内粘贴你的第二足本), T3因为(这些括号内粘贴第三足本), T4作为(在这些括号内粘贴您的第4个查询已满), t5 as(在这些括号内粘贴您的第5个查询已满)

现在,在完成此操作后,编写一个查询并提取所需的任何数据。例如

选择t1.abc,t2.abc,t3.xyz,t4.lmn,从T1,T2,T3,T4 t5.xyz,T5

希望这有助于。

+0

谢谢杰克这是非常接近,但我得到了一些结果,但不是我所期望的。我正在编辑我的问题与更新。 – Bob

2

谢谢大家的意见和帮助。这是一个非常棒的社区!所以我最终走向一个不同的方向,杰克思想让我走上了一条道路。

SELECT pr.[ProjectName] 
,T.[Task_Significance] 

    , sum (case when T.[TaskPercentCompleted] is not null and T.[Task_Significance] ='App' Or T.[TaskPercentCompleted] is not null and T.[Task_Significance] = 'Interface' then 1 else 0 end) as [Total] 
, sum (case when T.[TaskPercentCompleted] < 30 and T.[Task_Significance] ='App' Or T.[TaskPercentCompleted] < 30 and T.[Task_Significance] = 'Interface' then 1 else 0 end) as [Incomplete] 
, sum (case when T.[TaskPercentCompleted] >= 30 and T.[Task_Significance] ='App' Or T.[TaskPercentCompleted] >= 30 and T.[Task_Significance] = 'Interface' then 1 else 0 end) as [Complete] 
    FROM [psmado].[dbo].[MSP_EpmProject_UserView] as Pr 
join [PSMADO].[dbo].[MSP_EpmTask_UserView] as T 
On T.[projectUID] = Pr.[projectUID] 
Where 
T.[Task_Significance] like 'App' 
Or 
T.[Task_Significance] like 'Interface' 

Group by pr.[ProjectName], T.[Task_Significance]