构建包含组和分组项目的表(未汇总)

时间:2016-05-19 09:10:59

标签: sql-server tsql

我需要构建一个需要以下布局的表

[标题 - 包含各种数据列]

[Items - 包含与ID相关的数据,与标题列无任何关系]

[空白行]

[下一个小组项目]

假设我们有3个表... [tblPurchases],[tblLocations],[tblItems] 我需要[tblPurchases]中每个项目的新标题,然后我需要[tblItems]中的每个标题项下列出的[PurchasePKID]链接的所有项目。

现在我还需要做以下...... [tblPurchases]可能有也可能没有[LocationPKID] 如果为FALSE,则标题行将从[tblPurchases]收集数据 如果为TRUE,那么标题行将从[tblPurchases]和[tblLocations]收集数据。

根本没有聚合函数,它只是从表中检索数据。

这是我要测试的基本功能,我对其他人如何接近这个感兴趣,我现在的实际查询比这个例子稍微复杂一点,它还需要根据Items数据检查其他表并输出每个项目的另一个级别的项目,但是这个例子将让我很好地了解如何使用其他方法(希望如此)。

我当前的方法使用嵌套游标迭代标题,项目和子项,并一次构建输出表1件。它超过350线,真的很大,所以我希望你们可以帮助我在这里:)

由于

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你不想得到结果TABLE。 你想获得一些包含不同列的表的报告(HEAER,ITEMS ......)。

这是你使用游标的解决方案并不是一个坏主意。

答案 1 :(得分:0)

use [AdventureWorks2012]
go

declare @worktable table
(rectype int, salesorderid int,detail varchar(132))


insert into @worktable
Select  1,
        [SalesOrderID],
        concat([OrderDate],' ', p.[PersonType],' ',p.[Title] , ' ', p.[FirstName], ' ', p.[LastName])
from    [Sales].[SalesOrderHeader] sh
join    [Sales].[Customer]   sc on sc.customerid = sh.CustomerID
join    [Person].[Person] p on p.[BusinessEntityID] = sc.PersonID
where   SalesOrderID in (43659,43660,43661,43662,43663,43664)

insert into @worktable
Select  3,
        [SalesOrderID],
        ''
from    [Sales].[SalesOrderHeader] sh
join    [Sales].[Customer]   sc on sc.customerid = sh.CustomerID
join    [Person].[Person] p on p.[BusinessEntityID] = sc.PersonID
where   SalesOrderID in (43659,43660,43661,43662,43663,43664)

insert into @worktable
select  2,
        sd.[SalesOrderDetailID],
        concat(sd.[ProductID], ' ',p.[Name],' ',sd.[LineTotal])  
from    [Sales].[SalesOrderDetail] sd
join    [Production].[Product] p on p.ProductID = sd.[ProductID]
where   sd.[SalesOrderDetailID] in (43659,43660,43661,43662,43663,43664)

select  case 
        when rectype = 1 then 'Header'
        when rectype = 2 then 'Detail'
        else 'Blank'
        end type,
        salesorderid, detail 
from    @worktable
order   by salesorderid,rectype