我需要构建一个需要以下布局的表
[标题 - 包含各种数据列]
[Items - 包含与ID相关的数据,与标题列无任何关系]
[空白行]
[下一个小组项目]
假设我们有3个表... [tblPurchases],[tblLocations],[tblItems] 我需要[tblPurchases]中每个项目的新标题,然后我需要[tblItems]中的每个标题项下列出的[PurchasePKID]链接的所有项目。
现在我还需要做以下...... [tblPurchases]可能有也可能没有[LocationPKID] 如果为FALSE,则标题行将从[tblPurchases]收集数据 如果为TRUE,那么标题行将从[tblPurchases]和[tblLocations]收集数据。
根本没有聚合函数,它只是从表中检索数据。
这是我要测试的基本功能,我对其他人如何接近这个感兴趣,我现在的实际查询比这个例子稍微复杂一点,它还需要根据Items数据检查其他表并输出每个项目的另一个级别的项目,但是这个例子将让我很好地了解如何使用其他方法(希望如此)。
我当前的方法使用嵌套游标迭代标题,项目和子项,并一次构建输出表1件。它超过350线,真的很大,所以我希望你们可以帮助我在这里:)
由于
答案 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