как показать сводку продаж в rdlc из четырех таблиц sql, используя sql - PullRequest
3 голосов
/ 19 июля 2010

У меня плохие времена для создания отчета rdlc для отображения отчета в предопределенном формате, заданном моим клиентом.

Клиентский формат Выходной формат http://i29.tinypic.com/4t9g7b.jpg

Как вы можете заметить, красный фон - моя проблемная область, цена на предмет «А» была изменена трижды.И соответственно показаны их продажи, поломки и количество возврата.У меня есть 4 таблицы Products, SalesLog, Breakages, SalesReturn.Таблица продукта содержит последнюю (текущую) цену товара, а таблицы SalesLog, Breakages и SalesReturn - это цена на момент продаж, поломок и возврата продаж.Я написал запросы для SalesLog, Breakges и SalesReturn, который показывает строки в соответствии с ProductCode, Price и Количество.Но я не понимаю, как я могу объединить их (вывод 4 таблиц), чтобы показать результат ниже.

Запрос для SalesLog

SELECT  [Products].pCode AS Code,
    [Products].pName AS Item,
    SalesLog.[Price] AS Price ,
    COUNT(*)AS Quantity ,
    SUM(SalesLog.[Price]) AS Total
FROM    SalesLog
    INNER JOIN [Products] ON [Products].pCode = SalesLog.ProductCode
WHERE   BillDate = '07/01/2010'
GROUP BY [Products].pCode,[Products].pName ,
    SalesLog.[Price]

Запросдля поломок

SELECT  [Products].pCode AS Code,
    [Products].pName AS Item,
    Breakages.[Price] AS Price ,
    COUNT(*)AS Quantity ,
    SUM(Breakages.[Price]) AS Total
FROM    Breakages
    INNER JOIN [Products] ON [Products].pCode = Breakages.ProductCode
WHERE   BillDate = '07/01/2010'
GROUP BY [Products].pCode,[Products].pName ,
    Breakages.[Price]

Запрос на SalesReturn

SELECT  [Products].pCode AS Code,
    [Products].pName AS Item,
    Breakages.[Price] AS Price ,
    COUNT(*)AS Quantity ,
    SUM(Breakages.[Price]) AS Total
FROM    Breakages
    INNER JOIN [Products] ON [Products].pCode = Breakages.ProductCode
WHERE   BillDate = '07/01/2010'
GROUP BY [Products].pCode,[Products].pName ,
    Breakages.[Price]

Таблица продуктов

CREATE TABLE [dbo].[Products](
    [ProductId] [int] IDENTITY(1,1) NOT NULL,
    [pName] [nvarchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [pSize] [int] NULL,
    [pPrice] [decimal](10, 2) NULL,
    [pPackQty] [int] NULL,
    [pGroup] [int] NULL,
    [pCode] [int] NULL,
    [OpenStock] [int] NULL,
    [CloseStock] [int] NULL,
    [YrlyOpenStock] [int] NULL,
CONSTRAINT [PK_Products] PRIMARY KEY CLUSTERED 
(    
    [ProductId] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

МожетКто-нибудь, помогите мне или предложите какой-нибудь трюк для достижения этой цели.

заранее спасибо .....

Ответы [ 3 ]

2 голосов
/ 19 июля 2010

Будет ли что-то подобное в следующих строках полезным? (Дайте или возьмите квадратную скобку или две, потому что я не очень хорош в SQL Server)

SELECT [Products].pCode AS Code,
       [Products].pName AS Item,
       SLO.[Price]      AS Price,
       (SELECT COUNT(*)
           FROM SalesLog SL
           WHERE SL.ProductCode = SLO.ProductCode AND
                 SL.Billdate    = SLO.BillDate) AS SalesQty,
       (SELECT SUM(SL.Price)
           FROM SalesLog SL
           WHERE SL.ProductCode = SLO.ProductCode AND
                 SL.Billdate    = SLO.BillDate) AS SalesValue,
       (SELECT COUNT(*)
            FROM Breakages
            WHERE Breakages.ProductCode = SLO.ProductCode AND
                  Breakages.BillDate    = SLO.BillDate) AS BreakageQty,
       ...etc...

FROM SalesLog SLO INNER JOIN [Products] ON [Products].pCode = SLO.ProductCode
    WHERE BillDate = '07/01/2010'
    GROUP BY [Products].pCode,
             [Products].pName ,
             SLO.[Price]
2 голосов
/ 19 июля 2010

Это просто не в моей голове смотреть на твои данные. Я думаю, что я просто вытащу уникальный список «Код», «Предмет», «Цена», а затем использую этот уникальный список, чтобы СЛЕДУТЬ СОЕДИНЯТЬСЯ против каждого из ваших запросов (Sales, Breakage, Return). Вы можете использовать объединение, чтобы значения по умолчанию равнялись 0, если они равны нулю, и вы можете использовать последнее предложение where для исключения любых записей, которые имеют ноль для всех трех результатов (если вы не хотите показать, что ничего не было сделано в данном случае). цена).

1 голос
/ 20 июля 2010

Наконец, вопрос, который я задал на ServerFault.co, который был перенесен на StackOverFlow.com их администратором, получил ответ, который, я думаю, легко получить (по крайней мере для меня). Пожалуйста, не возражайте против тех парней, которые помогли мне. этот запрос делает то, что я хотел.

Спасибо всем за поддержку (особенно STACKOVERFLOW.COM )

Нажмите здесь, чтобы посмотреть ответ

...