我很难搞清楚为什么这个查询会在分组中产生排序错误。 我把它缩小到一个特定的案例陈述。它以一种方式工作(结果为字符串)但是当我尝试替换另一个表中的一个字段(它自己表现得很好)时会抛出整理错误。
以下代码运行正常。
Declare @StartDate Date = '09/01/2013';
Declare @EndDate Date = Getdate();
With Invoice as (
SELECT
a.DocEntry
,a.DocDate
,a.CardCode
,a.CardName
,a.U_CXS_FMST
,a.U_CXS_FRST
,a.U_DBS1StoreID
,CASE
when a.DocDate < '08/01/2011' and U_DBS1StoreID = 3 then 2
when a.DocDate < '08/01/2011' and U_DBS1StoreID = 4 then 3
when a.DocDate >= '08/01/2011' then isnull(U_CXS_FMST,U_DBS1StoreID)
end as CompleteStores
,d.description StoreName
,CASE a.U_CXS_FRST
WHEN N'Y' THEN 1
WHEN N'N' THEN 0
ELSE 0
END [iVend]
, CASE
WHEN ISNULL(a.U_DBS1StoreID,0)=0 THEN 0
WHEN ISNULL(a.U_DBS1StoreID,0)<>0 THEN 1
END [DBS]
, CASE a.CardCode
WHEN N'C100' THEN 1
ELSE 0
END [Web]
,a.NumAtCard
,a.U_TransactionID
,a.U_SalesSource
,s.Name
,b.LineNum
,b.ItemCode
,c.ItemName
,c.CstGrpCode
,c.U_WebName
,c.U_SupplierCatNum
,c.CatCode
,c.CatName
,c.GroupCode
,c.GroupName
,c.DeptCode
,c.DeptName
,c.MfcCode
,c.Manufacturer
,Cast(b.Quantity as INT) Quantity
,b.Price
,b.PriceBefDi
,b.LineTotal
,b.GrossBuyPr
,a.DocTotal
--,((Cast(b.Quantity as INT)* b.Price)-(Cast(b.Quantity as INT)*b.GrossBuyPr))/b.GrossBuyPr as MarginPCT
FROM
MonkeySports.dbo.INV1 AS b
INNER JOIN
MonkeySports.dbo.OINV AS a ON a.DocEntry = b.DocEntry
Inner Join
dbo.MS_OITM_Categories as c ON b.ItemCode = c.ItemCode
Inner Join
[@SALESSOURCE] as s on a.U_SalesSource = s.Code
left outer join
CXSRetail.dbo.RtlStore d on
CASE
when a.DocDate < '08/01/2011' and U_DBS1StoreID = '3' then '2'
when a.DocDate < '08/01/2011' and U_DBS1StoreID = '4' then '3'
when a.DocDate >= '08/01/2011' then isnull(U_CXS_FMST,U_DBS1StoreID)
end = cast(d.siteid as Nvarchar)
Where
GrossBuyPr > 0.01
and
a.DocDate between @StartDate and @EndDate
)
,Invoice1 as (
Select
DocEntry
,DocDate
,CardCode
,CardName
,U_CXS_FMST
,U_CXS_FRST
,U_DBS1StoreID
,CompleteStores
,StoreName
,CASE U_CXS_FRST
WHEN N'Y' THEN 1
WHEN N'N' THEN 0
ELSE 0
END [iVend]
, CASE
WHEN ISNULL(U_DBS1StoreID,0)=0 THEN 0
WHEN ISNULL(U_DBS1StoreID,0)<>0 THEN 1
END [DBS]
, CASE CardCode
WHEN N'C100' THEN 1
ELSE 0
END [Web]
,CASE
WHEN iVend = 0 AND DBS = 0 AND Web = 0
THEN 1
ELSE 0
END [Other]
,NumAtCard
,U_TransactionID
,U_SalesSource
,Name
,LineNum
,ItemCode
,ItemName
,CstGrpCode
,U_WebName
,U_SupplierCatNum
,CatCode
,CatName
,GroupCode
,GroupName
,DeptCode
,DeptName
,MfcCode
,Manufacturer
,Quantity
,Price
,PriceBefDi
,LineTotal
,GrossBuyPr
,DocTotal
--,MarginPCT
From Invoice
)
,Invoice2 as (
SELECT
--DocEntry
--DocDate
--,CardCode
--,CardName
--,U_CXS_FMST
--,U_CXS_FRST
--,U_DBS1StoreID
--,CompleteStores
CASE
When iVend = 1 or DBS = 1 then 'Retail'
When Web = 1 then 'Web'
When Other = 1 then 'Other'
End SalesChnl
,Case
When iVend = 1 OR DBS = 1 Then StoreName
When Web = 1 Then 'Internet'
When Other = 1 then 'Other'
End StoreName
,iVend
,DBS
,Web
,Other
--,NumAtCard
--,U_TransactionID
,U_SalesSource
,Name
--,LineNum
--,CstGrpCode
--,U_WebName
--,U_SupplierCatNum
--,CatCode
,CatName
--,GroupCode
,GroupName
--,DeptCode
,DeptName
--,MfcCode
,Manufacturer
,ItemCode
,ItemName
,Quantity
,Price
,PriceBefDi
,LineTotal
,GrossBuyPr
--,MarginPCT
--,DocTotal
FROM Invoice1
--Where GrossBuyPr = 0
Group By
--DocEntry
--DocDate
--,CardCode
--,CardName
--,U_CXS_FMST
--,U_CXS_FRST
--,U_DBS1StoreID
--,CompleteStores
CASE
When iVend = 1 or DBS = 1 then 'Retail'
When Web = 1 then 'Web'
When Other = 1 then 'Other'
End
,Case
When iVend = 1 OR DBS = 1 Then StoreName
When Web = 1 Then 'Internet'
When Other = 1 then 'Other'
End
,iVend
,DBS
,Web
,Other
--,NumAtCard
--,U_TransactionID
,U_SalesSource
,Name
--,LineNum
--,CstGrpCode
--,U_WebName
--,U_SupplierCatNum
--,CatCode
,CatName
--,GroupCode
,GroupName
--,DeptCode
,DeptName
--,MfcCode
,Manufacturer
,ItemCode
,ItemName
,Quantity
,Price
,PriceBefDi
,LineTotal
,GrossBuyPr
--,MarginPCT
--,DocTotal
)
Select *
from Invoice2
然而,当我尝试使用此代码时,它会抛出排序错误。
Declare @StartDate Date = '09/01/2013';
Declare @EndDate Date = Getdate();
With Invoice as (
SELECT
a.DocEntry
,a.DocDate
,a.CardCode
,a.CardName
,a.U_CXS_FMST
,a.U_CXS_FRST
,a.U_DBS1StoreID
,CASE
when a.DocDate < '08/01/2011' and U_DBS1StoreID = 3 then 2
when a.DocDate < '08/01/2011' and U_DBS1StoreID = 4 then 3
when a.DocDate >= '08/01/2011' then isnull(U_CXS_FMST,U_DBS1StoreID)
end as CompleteStores
,d.description StoreName
,CASE a.U_CXS_FRST
WHEN N'Y' THEN 1
WHEN N'N' THEN 0
ELSE 0
END [iVend]
, CASE
WHEN ISNULL(a.U_DBS1StoreID,0)=0 THEN 0
WHEN ISNULL(a.U_DBS1StoreID,0)<>0 THEN 1
END [DBS]
, CASE a.CardCode
WHEN N'C100' THEN 1
ELSE 0
END [Web]
,a.NumAtCard
,a.U_TransactionID
,a.U_SalesSource
,s.Name
,b.LineNum
,b.ItemCode
,c.ItemName
,c.CstGrpCode
,c.U_WebName
,c.U_SupplierCatNum
,c.CatCode
,c.CatName
,c.GroupCode
,c.GroupName
,c.DeptCode
,c.DeptName
,c.MfcCode
,c.Manufacturer
,Cast(b.Quantity as INT) Quantity
,b.Price
,b.PriceBefDi
,b.LineTotal
,b.GrossBuyPr
,a.DocTotal
--,((Cast(b.Quantity as INT)* b.Price)-(Cast(b.Quantity as INT)*b.GrossBuyPr))/b.GrossBuyPr as MarginPCT
FROM
MonkeySports.dbo.INV1 AS b
INNER JOIN
MonkeySports.dbo.OINV AS a ON a.DocEntry = b.DocEntry
Inner Join
dbo.MS_OITM_Categories as c ON b.ItemCode = c.ItemCode
Inner Join
[@SALESSOURCE] as s on a.U_SalesSource = s.Code
left outer join
CXSRetail.dbo.RtlStore d on
CASE
when a.DocDate < '08/01/2011' and U_DBS1StoreID = '3' then '2'
when a.DocDate < '08/01/2011' and U_DBS1StoreID = '4' then '3'
when a.DocDate >= '08/01/2011' then isnull(U_CXS_FMST,U_DBS1StoreID)
end = cast(d.siteid as Nvarchar)
Where
GrossBuyPr > 0.01
and
a.DocDate between @StartDate and @EndDate
)
,Invoice1 as (
Select
DocEntry
,DocDate
,CardCode
,CardName
,U_CXS_FMST
,U_CXS_FRST
,U_DBS1StoreID
,CompleteStores
,StoreName
,CASE U_CXS_FRST
WHEN N'Y' THEN 1
WHEN N'N' THEN 0
ELSE 0
END [iVend]
, CASE
WHEN ISNULL(U_DBS1StoreID,0)=0 THEN 0
WHEN ISNULL(U_DBS1StoreID,0)<>0 THEN 1
END [DBS]
, CASE CardCode
WHEN N'C100' THEN 1
ELSE 0
END [Web]
,CASE
WHEN iVend = 0 AND DBS = 0 AND Web = 0
THEN 1
ELSE 0
END [Other]
,NumAtCard
,U_TransactionID
,U_SalesSource
,Name
,LineNum
,ItemCode
,ItemName
,CstGrpCode
,U_WebName
,U_SupplierCatNum
,CatCode
,CatName
,GroupCode
,GroupName
,DeptCode
,DeptName
,MfcCode
,Manufacturer
,Quantity
,Price
,PriceBefDi
,LineTotal
,GrossBuyPr
,DocTotal
--,MarginPCT
From Invoice
)
,Invoice2 as (
SELECT
--DocEntry
--DocDate
--,CardCode
--,CardName
--,U_CXS_FMST
--,U_CXS_FRST
--,U_DBS1StoreID
--,CompleteStores
CASE
When iVend = 1 or DBS = 1 then 'Retail'
When Web = 1 then 'Web'
When Other = 1 then 'Other'
End SalesChnl
,Case
When iVend = 1 OR DBS = 1 Then StoreName
When Web = 1 Then Name --'Internet'
When Other = 1 then 'Other'
End StoreName
,iVend
,DBS
,Web
,Other
--,NumAtCard
--,U_TransactionID
,U_SalesSource
,Name
--,LineNum
--,CstGrpCode
--,U_WebName
--,U_SupplierCatNum
--,CatCode
,CatName
--,GroupCode
,GroupName
--,DeptCode
,DeptName
--,MfcCode
,Manufacturer
,ItemCode
,ItemName
,Quantity
,Price
,PriceBefDi
,LineTotal
,GrossBuyPr
--,MarginPCT
--,DocTotal
FROM Invoice1
--Where GrossBuyPr = 0
Group By
--DocEntry
--DocDate
--,CardCode
--,CardName
--,U_CXS_FMST
--,U_CXS_FRST
--,U_DBS1StoreID
--,CompleteStores
CASE
When iVend = 1 or DBS = 1 then 'Retail'
When Web = 1 then 'Web'
When Other = 1 then 'Other'
End
,Case
When iVend = 1 OR DBS = 1 Then StoreName
When Web = 1 Then Name --'Internet'
When Other = 1 then 'Other'
End
,iVend
,DBS
,Web
,Other
--,NumAtCard
--,U_TransactionID
,U_SalesSource
,Name
--,LineNum
--,CstGrpCode
--,U_WebName
--,U_SupplierCatNum
--,CatCode
,CatName
--,GroupCode
,GroupName
--,DeptCode
,DeptName
--,MfcCode
,Manufacturer
,ItemCode
,ItemName
,Quantity
,Price
,PriceBefDi
,LineTotal
,GrossBuyPr
--,MarginPCT
--,DocTotal
)
Select *
from Invoice2
唯一的区别是这个case表达式,我尝试使用@salessource表中的Name列而不是字符串Internet。
,Case
When iVend = 1 OR DBS = 1 Then StoreName
When Web = 1 Then Name --'Internet'
When Other = 1 then 'Other'
End StoreName
我尝试强制整理,但没有效果。
非常感谢任何帮助。
答案 0 :(得分:0)
取出列并在不抛出错误的状态下进入查询,然后开始逐个添加列,并在其中引发与其相关的其他列的错误检查,并在查询中添加类似的内容WHERE Clause
WHERE Table1.Collation1Col COLLATE DATABASE_DEFAULT = Table2.Collation2Col COLLATE DATABASE_DEFAULT
进一步调查检查表中Collation与其他列不同的列。使用
SELECT name, collation_name
FROM sys.columns
WHERE OBJECT_ID IN (SELECT OBJECT_ID
FROM sys.objects
WHERE type = 'U'
AND name = 'table_Name')
它将缩小您对罪犯的搜索范围。
答案 1 :(得分:0)
因此,最终的解决方案是创建一个真正的#temp表来存储具有排序规则问题的两个表中的数据,然后将该表连接到主查询的CTE中。
最终代码如下:
Declare @StartDate Date = '09/01/2013';
Declare @EndDate Date = Getdate();
Create Table #StoreTable (
SalesChnl Nvarchar(20),
StoreID Nvarchar(5),
StoreName Nvarchar(50));
insert into #StoreTable
SELECT
'Web'
,[Code]
,[Name]
FROM [@SALESSOURCE]
insert into #StoreTable
Select
'Retail'
,SiteId
,Description
from CXSRetail.dbo.RtlStore;
With Invoice as (
SELECT
a.DocEntry
,a.DocDate
,a.CardCode
,a.CardName
,a.U_CXS_FMST
,a.U_CXS_FRST
,a.U_DBS1StoreID
,CASE
when a.DocDate < '08/01/2011' and U_DBS1StoreID = 3 then 2
when a.DocDate < '08/01/2011' and U_DBS1StoreID = 4 then 3
when a.DocDate >= '08/01/2011' then isnull(U_CXS_FMST,U_DBS1StoreID)
end as CompleteStores
,CASE a.U_CXS_FRST
WHEN N'Y' THEN 1
WHEN N'N' THEN 0
ELSE 0
END [iVend]
, CASE
WHEN ISNULL(a.U_DBS1StoreID,0)=0 THEN 0
WHEN ISNULL(a.U_DBS1StoreID,0)<>0 THEN 1
END [DBS]
, CASE a.CardCode
WHEN N'C100' THEN 1
ELSE 0
END [Web]
,a.NumAtCard
,a.U_TransactionID
,a.U_SalesSource
,b.LineNum
,b.ItemCode
,c.ItemName
,c.CstGrpCode
,c.U_WebName
,c.U_SupplierCatNum
,c.CatCode
,c.CatName
,c.GroupCode
,c.GroupName
,c.DeptCode
,c.DeptName
,c.MfcCode
,c.Manufacturer
,Cast(b.Quantity as INT) Quantity
,b.Price
,b.PriceBefDi
,b.LineTotal
,b.GrossBuyPr
,a.DocTotal
,((Cast(b.Quantity as INT)* b.Price)-(Cast(b.Quantity as INT)*b.GrossBuyPr))/(Cast(b.Quantity as INT)*b.GrossBuyPr)*100 as MarginPCT
FROM
MonkeySports.dbo.INV1 AS b
INNER JOIN
MonkeySports.dbo.OINV AS a ON a.DocEntry = b.DocEntry
Inner Join
dbo.MS_OITM_Categories as c ON b.ItemCode = c.ItemCode
Where
GrossBuyPr > 0.01
and
a.DocDate between @StartDate and @EndDate
)
,Invoice1 as (
Select
DocEntry
,DocDate
,CardCode
,CardName
,U_CXS_FMST
,U_CXS_FRST
,U_DBS1StoreID
,CompleteStores
,CASE U_CXS_FRST
WHEN N'Y' THEN 1
WHEN N'N' THEN 0
ELSE 0
END [iVend]
, CASE
WHEN ISNULL(U_DBS1StoreID,0)=0 THEN 0
WHEN ISNULL(U_DBS1StoreID,0)<>0 THEN 1
END [DBS]
, CASE CardCode
WHEN N'C100' THEN 1
ELSE 0
END [Web]
,CASE
WHEN iVend = 0 AND DBS = 0 AND Web = 0
THEN 1
ELSE 0
END [Other]
,NumAtCard
,U_TransactionID
,U_SalesSource
,LineNum
,ItemCode
,ItemName
,CstGrpCode
,U_WebName
,U_SupplierCatNum
,CatCode
,CatName
,GroupCode
,GroupName
,DeptCode
,DeptName
,MfcCode
,Manufacturer
,Quantity
,Price
,PriceBefDi
,LineTotal
,GrossBuyPr
,DocTotal
,MarginPCT
From Invoice
)
,Invoice2 as (
SELECT
DocEntry
--DocDate
--,CardCode
--,CardName
--,U_CXS_FMST
--,U_CXS_FRST
--,U_DBS1StoreID
--,CompleteStores
,CASE
When iVend = 1 or DBS = 1 then 'Retail'
When Web = 1 then 'Web'
When Other = 1 then 'Other'
End SalesChnl
,CASE
When iVend = 1 OR DBS = 1 then CompleteStores
When Web = 1 OR Other = 1 then U_SalesSource
End as StoreID
,#StoreTable.StoreName
--,iVend
--,DBS
--,Web
--,Other
--,NumAtCard
--,U_TransactionID
--,U_SalesSource
--,Name
--,LineNum
--,CstGrpCode
--,U_WebName
--,U_SupplierCatNum
--,CatCode
,CatName
--,GroupCode
,GroupName
--,DeptCode
,DeptName
--,MfcCode
,Manufacturer
,ItemCode
,ItemName
,Quantity
,Price
,PriceBefDi
,LineTotal
,GrossBuyPr
--,DocTotal
,MarginPCT
FROM Invoice1
inner join
#StoreTable on
CASE
When iVend = 1 or DBS = 1 then 'Retail'
When Web = 1 then 'Web'
When Other = 1 then 'Web'
End = #StoreTable.SalesChnl
AND
CASE
When iVend = 1 OR DBS = 1 then CompleteStores
When Web = 1 OR Other = 1 then U_SalesSource
End = #StoreTable.StoreID
Group By
DocEntry
--DocDate
--,CardCode
--,CardName
--,U_CXS_FMST
--,U_CXS_FRST
--,U_DBS1StoreID
--,CompleteStores
,CASE
When iVend = 1 or DBS = 1 then 'Retail'
When Web = 1 then 'Web'
When Other = 1 then 'Other'
End
,CASE
When iVend = 1 OR DBS = 1 then CompleteStores
When Web = 1 OR Other = 1 then U_SalesSource
End
,#StoreTable.StoreName
--,iVend
--,DBS
--,Web
--,Other
--,NumAtCard
--,U_TransactionID
--,U_SalesSource
--,Name
--,LineNum
--,CstGrpCode
--,U_WebName
--,U_SupplierCatNum
--,CatCode
,CatName
--,GroupCode
,GroupName
--,DeptCode
,DeptName
--,MfcCode
,Manufacturer
,ItemCode
,ItemName
,Quantity
,Price
,PriceBefDi
,LineTotal
,GrossBuyPr
--,DocTotal
,MarginPCT
)
,CreditMemo as (
SELECT
a.DocEntry
,a.DocDate
,a.CardCode
,a.CardName
,a.U_CXS_FMST
,a.U_CXS_FRST
,a.U_DBS1StoreID
,CASE
when a.DocDate < '08/01/2011' and U_DBS1StoreID = 3 then 2
when a.DocDate < '08/01/2011' and U_DBS1StoreID = 4 then 3
when a.DocDate >= '08/01/2011' then isnull(U_CXS_FMST,U_DBS1StoreID)
end as CompleteStores
,CASE a.U_CXS_FRST
WHEN N'Y' THEN 1
WHEN N'N' THEN 0
ELSE 0
END [iVend]
, CASE
WHEN ISNULL(a.U_DBS1StoreID,0)=0 THEN 0
WHEN ISNULL(a.U_DBS1StoreID,0)<>0 THEN 1
END [DBS]
, CASE a.CardCode
WHEN N'C100' THEN 1
ELSE 0
END [Web]
,a.NumAtCard
,a.U_TransactionID
,a.U_SalesSource
,b.LineNum
,b.ItemCode
,c.ItemName
,c.CstGrpCode
,c.U_WebName
,c.U_SupplierCatNum
,c.CatCode
,c.CatName
,c.GroupCode
,c.GroupName
,c.DeptCode
,c.DeptName
,c.MfcCode
,c.Manufacturer
,(Cast(b.Quantity as INT)*-1) Quantity
,b.Price
,b.PriceBefDi
,b.LineTotal
,b.GrossBuyPr
,a.DocTotal
,((Cast(b.Quantity as INT)* b.Price)-(Cast(b.Quantity as INT)*b.GrossBuyPr))/(Cast(b.Quantity as INT)*b.GrossBuyPr)*100 as MarginPCT
FROM
MonkeySports.dbo.RIN1 AS b
INNER JOIN
MonkeySports.dbo.ORIN AS a ON a.DocEntry = b.DocEntry
Inner Join
dbo.MS_OITM_Categories as c ON b.ItemCode = c.ItemCode
Where
GrossBuyPr > 0.01
and
a.DocDate between @StartDate and @EndDate
)
,CreditMemo1 as (
Select
DocEntry
,DocDate
,CardCode
,CardName
,U_CXS_FMST
,U_CXS_FRST
,U_DBS1StoreID
,CompleteStores
,CASE U_CXS_FRST
WHEN N'Y' THEN 1
WHEN N'N' THEN 0
ELSE 0
END [iVend]
, CASE
WHEN ISNULL(U_DBS1StoreID,0)=0 THEN 0
WHEN ISNULL(U_DBS1StoreID,0)<>0 THEN 1
END [DBS]
, CASE CardCode
WHEN N'C100' THEN 1
ELSE 0
END [Web]
,CASE
WHEN iVend = 0 AND DBS = 0 AND Web = 0
THEN 1
ELSE 0
END [Other]
,NumAtCard
,U_TransactionID
,U_SalesSource
,LineNum
,ItemCode
,ItemName
,CstGrpCode
,U_WebName
,U_SupplierCatNum
,CatCode
,CatName
,GroupCode
,GroupName
,DeptCode
,DeptName
,MfcCode
,Manufacturer
,Quantity
,Price
,PriceBefDi
,LineTotal
,GrossBuyPr
,DocTotal
,MarginPCT
From CreditMemo
)
,CreditMemo2 as (
SELECT
DocEntry
--DocDate
--,CardCode
--,CardName
--,U_CXS_FMST
--,U_CXS_FRST
--,U_DBS1StoreID
--,CompleteStores
,CASE
When iVend = 1 or DBS = 1 then 'Retail'
When Web = 1 then 'Web'
When Other = 1 then 'Other'
End SalesChnl
,CASE
When iVend = 1 OR DBS = 1 then CompleteStores
When Web = 1 OR Other = 1 then U_SalesSource
End as StoreID
,#StoreTable.StoreName
--,iVend
--,DBS
--,Web
--,Other
--,NumAtCard
--,U_TransactionID
--,U_SalesSource
--,Name
--,LineNum
--,CstGrpCode
--,U_WebName
--,U_SupplierCatNum
--,CatCode
,CatName
--,GroupCode
,GroupName
--,DeptCode
,DeptName
--,MfcCode
,Manufacturer
,ItemCode
,ItemName
,Quantity
,Price
,PriceBefDi
,LineTotal
,GrossBuyPr
--,DocTotal
,MarginPCT
FROM CreditMemo1
inner join
#StoreTable on
CASE
When iVend = 1 or DBS = 1 then 'Retail'
When Web = 1 then 'Web'
When Other = 1 then 'Web'
End = #StoreTable.SalesChnl
AND
CASE
When iVend = 1 OR DBS = 1 then CompleteStores
When Web = 1 OR Other = 1 then U_SalesSource
End = #StoreTable.StoreID
Group By
DocEntry
--DocDate
--,CardCode
--,CardName
--,U_CXS_FMST
--,U_CXS_FRST
--,U_DBS1StoreID
--,CompleteStores
,CASE
When iVend = 1 or DBS = 1 then 'Retail'
When Web = 1 then 'Web'
When Other = 1 then 'Other'
End
,CASE
When iVend = 1 OR DBS = 1 then CompleteStores
When Web = 1 OR Other = 1 then U_SalesSource
End
,#StoreTable.StoreName
--,iVend
--,DBS
--,Web
--,Other
--,NumAtCard
--,U_TransactionID
--,Name
--,U_SalesSource
--,LineNum
--,CstGrpCode
--,U_WebName
--,U_SupplierCatNum
--,CatCode
,CatName
--,GroupCode
,GroupName
--,DeptCode
,DeptName
--,MfcCode
,Manufacturer
,ItemCode
,ItemName
,Quantity
,Price
,PriceBefDi
,LineTotal
,GrossBuyPr
--,DocTotal
,MarginPCT
)
Select *
from
Invoice2
Union
Select *
from
CreditMemo2
Order by
MarginPCT Desc
,SalesChnl
,StoreName
,CatName
,DeptName
DROP TABLE #StoreTable
感谢大家的帮助。