2016-06-13 82 views
1

我試圖讓使用分組集在SQLHirearchial通過分組集動態分組

用戶將通過列的hirearichial報告被歸類爲逗號分隔的參數存儲過程

的如:如果用戶需要按國再由區域然後通過DEPTNO 他會送的參數如:

@grouplist='Country,Region,DeptNo' 

進行分組會dynamic.It列將被髮送作爲參數傳遞給存儲procedure.i不能使用s SRS reports.This是我用來生成報告

--select Country,region,Deptno , Count(EmpNo) EmpCount, 
--Sum(Sal) Total, GROUPING_ID(Country, region,Deptno) AS GrpLevel 
--from emp 
--group by GROUPING SETS((Country,region,Deptno),(Country,Region),(Country) ,()) having country is not null 

DECLARE @sql NVARCHAR(MAX) = N'select '[email protected] +' , Count(EmpNo) EmpCount, 
Sum(Sal) Total, GROUPING_ID(' + @grouplist + ') AS GrpLevel 
from emp 
group by GROUPING SETS(' [email protected] +' ,()) having country is not null 
order by ' + @grouplist 

-- Select @sql 

EXEC sp_executesql @sql; 

我得到的輸出如下

Current Output

實際輸出查詢所需

Actual Output Needed

是有任何選項可以顯示按單列中的列作爲輸出。這裏問題是按列分組ming作爲存儲過程的參數。 任何幫助表示讚賞。

樣本數據如下

Sample data

+0

您是否願意拋出一些示例數據?動態SQL不是必需的。一次可以嘗試使用Rollup進行分組。 – KumarHarsh

+0

@kumarHarsh列將被分組由用戶發送。即爲什麼它是動態的 – user1554650

+0

@ user1554650,因爲您已經使用Excel,爲什麼不簡單地返回未分組的結果並使用Excel數據透視表進行分組? – Alex

回答

0

只是嘗試寫一個外部查詢:我認爲你的SQL語句的內部查詢。

與#TEMP作爲

選擇 '印度' 作爲國家,NULL爲區域,CAST(NULL AS VARCHAR)作爲DEPTNO ,5爲empcount,7875爲Grptotal

UNION ALL

選擇 '印度' 的國家, '卡納塔克邦' 作爲地區,CAST(NULL AS VARCHAR)作爲DEPTNO ,3爲empcount,5475作爲Grptotal

UNION ALL

選擇 '印度' 作爲國家 '卡納塔克邦' 作爲區,CAST(20 AS VARCHAR)作爲DEPTNO ,1作爲empcount,2975爲Grptotal

UNION ALL

選擇'印度' 作爲國家 '卡納塔克邦' 作爲區,CAST(30 AS VARCHAR)作爲DEPTNO ,2作爲empcount,2500爲Grptotal

SELECT

COALESCE(X.deptno,X.Region,X.country)AS grpby,X.empcount,X。Grptotal

FROM

SELECT NULL作爲國家,NULL AS地區,NULL作爲DEPTNO

)作爲虛擬

CROSS APPLY

選擇

國家,地區,DEPTNO,empcount,Grptotal

從#TEMP

)×

跨應用此處是動態選擇國家,地區,DEPTNO

讓我知道如果您有任何查詢

+0

你能格式化你的文章嗎?這是非常難以閱讀。 – Alex