2015-08-02 5 views
0

Привет, я видел много статей, но ни один из них не отвечает на мой вопрос. У меня есть таблица ProductPropertyPriceДинамический стержень без агрегации

CREATE TABLE [dbo].[Product_PropertyPrice](
[id] [int] IDENTITY(1,1) NOT NULL, 
[ProductID] [int] NULL, 
[PropertyID] [int] NULL, 
[PropertyValueID] [int] NULL, 
[PriceID] [int] NULL, 
[ValidFrom] [date] NULL, 

и я хочу иметь строку для каждого продукта, и каждый действует с даты со всеми свойствами Ид и propertiesvaluesid и цена ид в виде столбцов

я попробовал это, но это не работа может кто-нибудь мне помочь?

жаль, что я не могу опубликовать мой код, я получаю сообщение об ошибке, и я новичок в stachoverflow

 create PROCEDURE [dbo].[GetPriceTable] (@ProductTypeID int) 
     AS 
    BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

    SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.PropertyID) 
      FROM (SELECT Product_PropertiesLookup.PropertyID,Product_PropertiesLookup.PropertyName 
FROM   Product_PropertiesLookup INNER JOIN 
         Product_PropertiesperProductType ON Product_PropertiesLookup.PropertyID = Product_PropertiesperProductType.ProductPropertyID 
WHERE  (Product_PropertiesperProductType.ProductTypeID = 1)) c 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

     --pivot query 
set @query = 'SELECT ProductID,PriceID,ValidFrom, ' + @cols + ',rownum from 
      (SELECT  ProductID, PriceID, ValidFrom,PropertyValueID,PropertyID, 
      row_number() over (partition by propertyid order by productid) as RowNum 
     FROM   Product_PropertyPrice) x 
      pivot 
      (
       max(PropertyValueID) 
       for PropertyID in (' + @cols + ') 

      ) p ' 
      exec (@query) 
     END 

я получаю это приводит к

ProductID PriceID  ValidFrom 1   2   3   4   RowNum 
----------- ----------- ---------- ----------- ----------- ----------- ----------- -------------------- 
110   1   2015-01-01 0   NULL  1   1   1 
110   1   2015-01-01 NULL  NULL  NULL  1   2 
110   1   2015-01-01 NULL  NULL  1   1   3 
110   1   2015-01-01 1   NULL  1   1   4 
110   1   2015-01-01 2   NULL  NULL  1   5 
110   1   2015-01-01 NULL  NULL  NULL  1   6 
110   1   2015-01-01 NULL  NULL  NULL  1   7 
110   1   2015-01-01 3   NULL  NULL  1   8 
110   1   2015-01-01 4   NULL  1   1   9 
110   1   2015-01-01 NULL  NULL  1   1   10 
110   1   2015-01-01 5   NULL  1   1   11 
110   1   2015-01-01 6   NULL  1   1   12 
110   1   2015-01-01 7   NULL  1   1   13 
110   1   2015-01-01 8   NULL  1   1   14 
110   1   2015-01-01 9   NULL  1   1   15 
110   1   2015-01-01 10   NULL  1   1   16 
110   1   2015-01-01 11   NULL  1   1   17 
110   1   2015-01-01 12   NULL  1   1   18 
110   1   2015-01-01 13   NULL  1   1   19 
110   1   2015-01-01 14   NULL  1   1   20 
110   1   2015-01-01 15   NULL  1   1   21 
110   1   2015-01-01 16   NULL  1   1   22 
110   1   2015-01-01 17   NULL  1   1   23 
110   1   2015-01-01 NULL  NULL  1   1   24 
110   1   2015-01-01 NULL  NULL  1   1   25 
110   1   2015-01-01 NULL  NULL  1   1   26 
110   1   2015-01-01 NULL  NULL  1   1   27 
110   1   2015-01-01 NULL  NULL  1   1   28 
110   1   2015-01-01 NULL  NULL  1   1   29 

sample data 

id   ProductID PropertyID PropertyValueID PriceID  ValidFrom 
----------- ----------- ----------- --------------- ----------- ---------- 
70   110   1   23    2   2015-01-01 
71   110   3   1    2   2015-01-01 
72   110   4   1    2   2015-01-01 
73   110   1   24    2   2015-01-01 
74   110   3   1    2   2015-01-01 
75   110   4   1    2   2015-01-01 
76   110   1   25    3   2015-01-01 
77   110   3   1    3   2015-01-01 
78   110   4   1    3   2015-01-01 
79   110   1   26    3   2015-01-01 
80   110   3   1    3   2015-01-01 
81   110   4   1    3   2015-01-01 
82   110   1   27    3   2015-01-01 
83   110   3   1    3   2015-01-01 
84   110   4   1    3   2015-01-01 

Result i need 
ProductID PropertyID(1) PropertyID(3) PropertyID(4) PriceID  ValidFrom 
    110   23   1    1   2   2015-01-01 
    110   24   1    1   2   2015-01-01 
    110   25   1    1   3   2015-01-01 
    110   26   1    1   3   2015-01-01 
    110   27   1    1   3   2015-01-01 
+0

Добро пожаловать в stackoverflow. Вы написали, что получили сообщение об ошибке, какова ошибка, которую вы получили? –

+0

привет. Я не получаю данные так, как мне нужно. они сгруппированы не в обычном порядке. вы хотите, чтобы я пришёл вам свои входные данные? – Yannis

+0

Я получаю этот результат – Yannis

ответ

0

Попробуйте что-то вроде этого

SELECT ProductID, 
     [PropertyID(1)]=Max([PropertyID(1)]), 
     [PropertyID(3)]=Max([PropertyID(3)]), 
     [PropertyID(4)]=Max([PropertyID(4)]), 
     ValidFrom=Max(ValidFrom) 
FROM (SELECT ProductID, 
       rn=Row_number() 
        OVER(
         partition BY PropertyID 
         ORDER BY (SELECT NULL)), 
       PropertyID, 
       CASE WHEN PropertyID = 1 THEN PropertyValueID END AS [PropertyID(1)], 
       CASE WHEN PropertyID = 3 THEN PropertyValueID END AS [PropertyID(3)], 
       CASE WHEN PropertyID = 4 THEN PropertyValueID END AS [PropertyID(4)], 
       PriceID, 
       ValidFrom AS ValidFrom 
     FROM Yourtable)a 
GROUP BY ProductID, 
      rn 

Для этого необходимо преобразовать dynamic query. Скажите, пожалуйста, если вам нужна помощь при конвертации в dynamic query

+0

Спасибо @ Индийский. я был бы признателен, если бы вы могли преобразовать его в динамический, и, если возможно, мы можем сделать это как функцию таблицы, потому что мне нужно запросить результаты? Заранее спасибо – Yannis

+0

Ждите, пожалуйста, прежде чем создавать его, кажется, что он не возвращает правильные результаты. позвольте мне немного проверить его и отправить вам обратную связь. – Yannis

+0

Я успешно добавил идентификатор цены в качестве столбца. единственная проблема заключается в том, что вы запрашиваете отображение первых строк с нулевыми значениями. Все остальные строки отображаются правильно – Yannis

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