Центр с помощью SQL Server 2000

16
задан naide 20 July 2018 в 12:54
поделиться

4 ответа

Мы успешно использовали следующий подход в прошлом...

SELECT [p].ProductID,
       [p].Name,
       MAX(CASE [m].MetaKey
             WHEN 'A'
               THEN [m].MetaValue
           END) AS A,
       MAX(CASE [m].MetaKey
             WHEN 'B'
               THEN [m].MetaValue
           END) AS B,
       MAX(CASE [m].MetaKey
             WHEN 'C'
               THEN [m].MetaValue
           END) AS C
FROM   Products [p]
       INNER JOIN ProductMeta [m]
         ON [p].ProductId = [m].ProductId
GROUP  BY [p].ProductID,
          [p].Name 

Это могут также быть полезные агрегирования перемещения с использованием...

SUM(CASE x WHEN 'y' THEN yVal ELSE 0 END) AS SUMYVal

РЕДАКТИРОВАНИЕ

Также стоящий замечания это использует стандарт ANSI SQL и таким образом, это будет работать через платформы :)

14
ответ дан 30 November 2019 в 15:44
поделиться
Select a.ProductId
  ,a.Name
  ,(Select c.MetaValue
    From [Product Meta] c
    Where c.ProductId = a.ProductId
    And c.MetaKey = 'A') As 'A'
   ,(Select d.MetaValue
    From [Product Meta] d
    Where d.ProductId = a.ProductId
    And d.MetaKey = 'B') As 'B'
   ,(Select e.MetaValue
      From [Product Meta] e
      Where e.ProductId = a.ProductId
      And e.MetaKey = 'C') As 'C'
From Products a
Order By a.ProductId Asc
3
ответ дан 30 November 2019 в 15:44
поделиться

используйте хранимую процедуру здесь: http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables

также проверяет комментарии.

2
ответ дан 30 November 2019 в 15:44
поделиться

Если ваша база данных - 2005, а ваша база данных находится в режиме совместимости 2000, вы можете обойти более низкий режим совместимости, запустив запрос из базы данных 2005. Нацельтесь на базу данных 2000, используя соглашение об именах трех частей для ваших таблиц в запросе, например DatabaseNameHere.dbo.TableNameHere

6
ответ дан 30 November 2019 в 15:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: