Sql 无论返回多少行,相关子查询结果都不会更改。正确-这是相关子查询和非相关子查询之间的区别。无论返回多少行,非相关子查询结果都不会更改。如果存在产品破损和无销售的情况,则不会显示破损。早些时候,我对SalesLog.Product代码有相同的引用。谢天谢地,当
Sql 无论返回多少行,相关子查询结果都不会更改。正确-这是相关子查询和非相关子查询之间的区别。无论返回多少行,非相关子查询结果都不会更改。如果存在产品破损和无销售的情况,则不会显示破损。早些时候,我对SalesLog.Product代码有相同的引用。谢天谢地,当,sql,sql-server,tsql,Sql,Sql Server,Tsql,无论返回多少行,相关子查询结果都不会更改。正确-这是相关子查询和非相关子查询之间的区别。无论返回多少行,非相关子查询结果都不会更改。如果存在产品破损和无销售的情况,则不会显示破损。早些时候,我对SalesLog.Product代码有相同的引用。谢天谢地,当产品破损且无销售时,可能会出现这种情况,那么它将不会显示破损。早些时候,我对SalesLog.Product代码有相同的引用。谢谢Shello Jon Payne,我已经根据当前情况用query更新了我的问题。您的查询没有显示任何输出,所以我添
无论返回多少行,相关子查询结果都不会更改。正确-这是相关子查询和非相关子查询之间的区别。无论返回多少行,非相关子查询结果都不会更改。如果存在产品破损和无销售的情况,则不会显示破损。早些时候,我对SalesLog.Product代码有相同的引用。谢天谢地,当产品破损且无销售时,可能会出现这种情况,那么它将不会显示破损。早些时候,我对SalesLog.Product代码有相同的引用。谢谢Shello Jon Payne,我已经根据当前情况用query更新了我的问题。您的查询没有显示任何输出,所以我添加了Products表引用,现在显示了所有产品的详细信息。我现在只想展示那些发生销售、损坏或退款的产品。例如,A有10次销售0次中断0次退款->它将显示B有0次销售10次中断0次退款->它将显示C有0次销售0次中断0次退款->它将不显示感谢您没有提到产品表-我正在查看您提供的信息。你好,Jon Payne,我已根据当前情况通过查询更新了我的问题。您的查询没有显示任何输出,所以我添加了Products表引用,现在显示了所有产品的详细信息。我现在只想展示那些发生销售、损坏或退款的产品。例如,A有10次销售0次中断0次退款->它将显示B有0次销售10次中断0次退款->它将显示C有0次销售0次中断0次退款->它将不显示感谢您没有提到产品表-我正在查看您提供的信息。嗨,Jon Payne,我找到了实现目标的新方法。我创建了一个临时表,在其中我添加了这些数据,然后删除了值为0的行sals、breakages和Return。是因为我设置了BillDate错误,所以查询不起作用吗?我把它设置为“12-10-2010”,而不是“12-10-2010”?嗨,乔恩·佩恩,我找到了实现我目标的新方法。我创建了一个临时表,在其中我添加了这些数据,然后删除了值为0的行sals、breakages和Return。是因为我设置了BillDate错误,所以查询不起作用吗?我将其设置为“12-10-2010”,而不是“12-10-2010”?
Select s.pName,
s.ProductCode,
min(s.Price) as MinPrice,
sum(s.Quantity) as SalesQty,
sum(s.Price * s.Quantity) as SalesValue,
isnull((select sum(Quantity)
from Breakages
where pGroup = 16
and quantity > 0), 0) as BreakQty,
isnull((select sum(Price * Quantity)
from Breakages
where pGroup = 16), 0) as BreakValue,
isnull((select CASE
WHEN min(r.Quantity) != 0 THEN Sum(r.Quantity)
END), 0) as ReturnQty,
isnull((select sum(Price * Quantity)
from SalesReturn
where pGroup = 16), 0) as ReturnValue
from SalesLog as s
INNER JOIN SalesReturn as r
ON r.BillDate = s.BillDate
INNER JOIN Breakages as b
ON r.BillDate = b.BillDate
where s.BillDate = '12-10-2010'
and r.BillDate = '12-10-2010'
and b.BillDate = '12-10-2010'
and s.pGroup = 16
and b.pGroup = 16
and r.pGroup = 16
group by s.pName,
s.ProductCode;
Name Code Price SalesQty SValue BreakQty BValue RefundQty RQty
CDM 42GRMS. 854 15 3 45 2 0 3 30
APPLE JUICE 750ML 860 59 5 295 2 0 3 30
BISLERI WATER 865 3 5 15 2 0 3 30
PERK 35 GRMS 870 10 20 200 2 0 3 30
CREATE TABLE [dbo].[SalesReturn](
[srID] [int] IDENTITY(1,1) NOT NULL,
[ProductCode] [int] NULL,
[Quantity] [int] NULL,
[pGroup] [int] NULL,
[MemoNo] [int] NULL,
[SalesmanID] [int] NULL,
[Price] [int] NULL,
[BillDate] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[AddedOn] [datetime] NULL,
CONSTRAINT [PK_SalesReturn] PRIMARY KEY CLUSTERED
([srID] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[SalesLog](
[SalesID] [int] IDENTITY(1,1) NOT NULL,
[MemoNo] [int] NULL,
[ProductCode] [int] NULL,
[Quantity] [int] NULL,
[Price] [int] NULL,
[pGroup] [int] NULL,
[pName] [nvarchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[pSize] [int] NULL,
[BillDate] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
CONSTRAINT [PK_SalesLog] PRIMARY KEY CLUSTERED
( [SalesID] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[Breakages](
[breakId] [int] IDENTITY(1,1) NOT NULL,
[MemoNo] [int] NULL,
[SalesmanID] [int] NULL,
[ProductCode] [int] NULL,
[pName] [nvarchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Quantity] [int] NULL,
[Price] [int] NULL,
[pGroup] [int] NULL,
[BillDate] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[AddedOn] [datetime] NULL,
CONSTRAINT [PK_Breakages_1] PRIMARY KEY CLUSTERED (
[breakId] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
SELECT p.pName, p.pCode, MIN(p.pPrice) AS MinPrice
, SUM(s.Quantity) AS SalesQty, SUM(s.Quantity) * MIN(p.pPrice) AS SalesValue
, MIN(b.Quantity) AS BreakQty, MIN(b.Quantity) * MIN(p.pPrice) AS BreakValue
, MIN(r.Quantity) AS ReturnQty, MIN(r.Quantity) * MIN(p.pPrice) AS ReturnValue
FROM Products AS p
OUTER APPLY (SELECT SUM(s.Quantity) AS Quantity
FROM SalesLog AS s
WHERE s.BillDate = '12-10-2010'
AND s.ProductCode = p.pCode
) AS s
OUTER APPLY (SELECT SUM(r.Quantity) AS Quantity
FROM SalesReturn AS r
WHERE r.BillDate = '12-10-2010'
AND r.ProductCode = p.pCode
) AS r
OUTER APPLY (SELECT SUM(b.Quantity) AS Quantity
FROM Breakages AS b
WHERE b.BillDate = '12-10-2010'
AND b.ProductCode = p.pCode
) AS b
WHERE p.pGroup!=15 and p.pGroup!=16
GROUP BY p.pName, p.pCode;
isnull((select sum(Quantity)
from Breakages
where pGroup = 16
and quantity > 0), 0) as BreakQty
SELECT s.pName
, s.ProductCode
, MIN(s.Price) AS MinPrice
, SUM(s.Quantity) AS SalesQty
, SUM(s.Quantity) * MIN(s.Price) AS SalesValue
, MIN(b.Quantity) AS BreakQty
, MIN(b.Quantity) * MIN(s.Price) AS BreakValue
, MIN(r.Quantity) AS ReturnQty
, MIN(r.Quantity) * MIN(s.Price) AS ReturnValue
FROM SalesLog AS s
OUTER APPLY (SELECT SUM(r.Quantity) AS Quantity
FROM @SalesReturn AS r
WHERE r.BillDate = s.BillDate
AND r.ProductCode = s.ProductCode
) AS r
OUTER APPLY (SELECT SUM(b.Quantity) AS Quantity
FROM @Breakages AS b
WHERE b.BillDate = s.BillDate
AND b.ProductCode = s.ProductCode
) AS b
WHERE s.BillDate = '12-10 2010'
GROUP BY s.pName
, s.ProductCode ;
SELECT p.pName
, p.ProductCode
, p.Price AS MinPrice
, s.Quantity AS SalesQty
, s.Quantity * p.Price AS SalesValue
, b.Quantity AS BreakQty
, b.Quantity * p.Price AS BreakValue
, r.Quantity AS ReturnQty
, r.Quantity * p.Price AS ReturnValue
FROM Products AS p
OUTER APPLY (SELECT SUM(s.Quantity) AS Quantity
FROM SalesLog AS s
WHERE s.BillDate = '12-10 2010'
AND s.ProductCode = p.ProductCode
) AS s
OUTER APPLY (SELECT SUM(r.Quantity) AS Quantity
FROM SalesReturn AS r
WHERE r.BillDate = '12-10 2010'
AND r.ProductCode = p.ProductCode
) AS r
OUTER APPLY (SELECT SUM(b.Quantity) AS Quantity
FROM Breakages AS b
WHERE b.BillDate = '12-10 2010'
AND b.ProductCode = p.ProductCode
) AS b
WHERE p.pGroup < 15
AND p.pGroup > 16
AND (
s.Quantity IS NOT NULL
OR r.Quantity IS NOT NULL
OR b.Quantity IS NOT NULL
)