2015-07-28 15 views
0

Я не уверен, правильно ли я назвал этот вопрос, вот мой вопрос. У меня есть таблица, которая имеет Products, и эти продукты имеют различные детали, включая цену покупки, отпускную цену, начальное количество запасов, количество проданных товаров, количество оставшихся предметов. Затем у меня есть другая таблица с информацией о продажах на основе местоположения покупателя, позвоните по телефону LocationSales. Мне нужно создать таблицу, в которой будут отображаться продукты и информация о местоположении, как в приведенном ниже снимке. Graphical representation of what I want to achieveСоздать упорядоченный стол

Я сделал представление, используя Excel. Я уже добился этого, работая над проектом в прошлом году, но в нем участвовали много или исключения для жесткого кодирования и переполнения стека. Я хотел бы добиться этого более эффективно. Это гипотетическое представление моей реальной проблемы. Я попытался использовать иерархические таблицы, прежде чем использовать Telerik UI, который работал хорошо, но не отображал информацию, как того требуют мои начальники. Я был бы очень признателен, если бы кто-то указал мне в правильном направлении. Я понимаю, что здесь невозможно решить всю проблему, но я был бы признателен кому-то, включая ссылку на сообщение в блоге или видео или какую-то литературу, которая может мне помочь. PS. Я также пробовал просмотр базы данных, не работал по мере необходимости.

Я использую ASP.NET C# MVC5 с Visual Studio 2013 и базы данных в SQL Server 2012

EDIT: // Таблицы Я использую

enter image description here

EDIT 2: /// согласно моим исследованиям до сих пор я удалось получить следующие

enter image description here

SQL CODE: //

select * from 
(select 
locationName 
,productName as [PRODUCT] 
,roadTransfer 
,airTransfer 
,initialQty 
,soldQty 
,remQty 
from 
Location as l inner join 
Sales as s on l.locationID=s.locationID 
inner join 
Product as p on p.productID=s.productID 
)as BaseData 
pivot(
count(roadTransfer) 
for locationName 
in([Germany] 
    ,[Kenya] 
) as SummaryTable 
order by Product asc 

Я использовал сводную таблицу. В настоящее время я пытаюсь получить как дорогу, так и воздушную передачу. Я попытаюсь использовать предложение GROUP BY и посмотреть, что я могу сделать. Я опубликую обновление, когда у меня будет полное решение.

+1

Пожалуйста, вы можете представить структуру таблицы из трех таблиц, относящихся к и мы можем пойти на это решение. В основном вам нужно создать динамический стержень в SQL для этого. – sarin

+0

Хорошо. Позвольте мне добавить править –

+0

@sarin Я использовал ваше предложение и смог добиться чего-то, как я опубликовал в редактировании. –

ответ

1

Итак, в этот момент (Edit 2) вы создали шарнир для дорожной передачи. К сожалению, вы не можете агрегировать более одного значения в точке опоры, поэтому путь вокруг него состоит в том, чтобы сделать два опорных точки и объединить результаты. Вы результирующее множество, следовательно, имеете 3 части запроса для получения запроса

  1. Списка продуктов
  2. откидывания Дороги трансфертных сумм по странам
  3. откидывания Air трансфертных сумм по странам

Если вы оставили присоединиться все из них вместе в одном запросе на идентификаторе продукта вы приблизитесь к вашему запросу, но порядок столбцов будет не совсем правильным, т. е. все трансферы будут поступать до воздушных трансферов.

I have created a SQLFiddle demonstrating this

Select p.prodName AS Product, 
    p.initialQty AS [Initial Quantity], 
    p.sold AS [Quantity Sold], 
    p.remaining AS [Quantity Remaining], 
    AirT.[Air Transfer - Germany], 
    RoadT.[Road Transfer - Germany], 
    AirT.[Air Transfer - Kenya], 
    RoadT.[Road Transfer - Kenya] 

FROM Products p 
LEFT JOIN ( 
      SELECT productID, [Germany] AS [Air Transfer - Germany], [Kenya] AS [Air Transfer - Kenya] 
      FROM (select productID, l.locName, qty 
        FROM sales s 
        INNER JOIN Locations l on l.locID = s.locID 
        where transfer = 'Air Transfer') as SourceTable 
      PIVOT (SUM(qty) 
      FOR locName IN ([Germany], [Kenya]) 
        ) As AirTransfers 
     ) AirT on AirT.productID = p.ProductID 

LEFT JOIN (   
      SELECT productID, [Germany] AS [Road Transfer - Germany], [Kenya] AS [Road Transfer - Kenya] 
      FROM (select productID, l.locName, qty 
        FROM sales s 
        INNER JOIN Locations l on l.locID = s.locID 
        where transfer = 'Road Transfer') as SourceTable 
      PIVOT (SUM(qty) 
      FOR locName IN ([Germany], [Kenya]) 
        ) As RoadTransfers 
     ) RoadT on RoadT.productID = p.ProductID 
+0

Я добавил код SQL ... любезно показать, как это сделать –

+0

@WairimuMurigi Попробуйте это в качестве примера. – sarin

Смежные вопросы