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
            )