Как я могу показать подробные строки в виде столбцов (бесплатные настраиваемые пользовательские свойства) с помощью MS SQL
Уважаемые эксперты, пожалуйста, просветите меня.
Пожалуйста, обратите внимание: следующее сведено к минимуму, чтобы сохранить его простым. В оригинальном дизайне есть по крайней мере еще одна таблица для хранения определений Userproperty и некоторых других вещей, чтобы сохранить ее более общей для хранения свойств Userproperty и их определений для нескольких таблиц.
Предположим, что у нас есть главный стол ...
CREATE TABLE Products ( Id int, Name char(50) ); INSERT INTO Products(Id, Name) VALUES (1, 'Prod1'),(2, 'Prod2');
... и таблица, содержащая определенные пользователем свойства и значения
CREATE TABLE ProductUserProperties ( Id int, MasterId int, PropertyName char(50), PropertyValue char(50) ); INSERT INTO ProductUserProperties (Id, MasterId, PropertyName, PropertyValue) VALUES (1, 1, 'PropA', 'Prod1PropA_UserValue'), (2, 1, 'PropB', 'Prod1PropB_UserValue'), (3, 2, 'PropA', 'Prod2PropA_UserValue'), (4, 2, 'PropB', 'Prod2PropB_UserValue');
Простой запрос по левым соединениям ...
SELECT Products.Id Products_Id, Products.Name Products_Name, ProductUserProperties.Id ProductUserProperties_Id, ProductUserProperties.MasterId ProductUserProperties_MasterId, ProductUserProperties.PropertyName ProductUserProperties_PropertyName, ProductUserProperties.PropertyValue ProductUserProperties_PropertyValue FROM Products LEFT JOIN ProductUserProperties ON ProductUserProperties.MasterId = Products.Id ORDER BY Products.Id, ProductUserProperties.PropertyName
...результаты в (сокращенные имена столбцов):
Prod_Id Prod_Name ProdUsrProps_Id ProdUsProp_MstrId PropertyName PropertyValue 1 Prod1 1 1 PropA Prod1PropA_UserValue 1 Prod1 2 1 PropB Prod1PropB_UserValue 2 Prod2 3 2 PropA Prod2PropA_UserValue 2 Prod2 4 2 PropB Prod2PropB_UserValue
Но мне нравится иметь что-то вроде этого
Products_Id Products_Name PropA PropB Prop# 1 Prod1 Prod1PropA_UserValue Prod1PropB_UserValue ... 2 Prod2 Prod2PropA_UserValue Prod2PropB_UserValue ....
Наконец-то вопрос
Я знаю, как получить желаемый результат с помощью динамически создаваемых SQL-файлов.
Но мой вопрос таков: могу ли я получить желаемый результат только с "чистым" SQL, используя CTE, PIVOT и т. д., исключая хранимые процедуры?
Заранее Вам большое спасибо ;)
Что я уже пробовал:
Читал о CTE, Pivot и много гуглил. Но на данный момент я все еще не имею ни малейшего представления :(
Afzaal Ahmad Zeeshan
Я не знаю, как вы сравниваете pivot с хранимой процедурой? Хранимая процедура-это просто функция, где стержень-это то, что вы ищете здесь.
Я думаю, что поворот вокруг PropertyName
это то, что вы хотите... Потому что нет никакого способа вернуть столбцы на основе таких свойств, как ... [PropertyValue] as 'PropA'
так как данные переплетены.
Читайте дальше Поворот здесь и посмотрите, может быть, этот образец вам что-то скажет.
0x01AA
"Я не знаю, как вы сравниваете pivot с хранимой процедурой? - А я нет! Как вы пришли к этому странному утверждению?
Мой единственный вопрос: Могу ли я сделать это с помощью "только sql" или это возможно только с помощью динамически создаваемых операторов sql?
- Прочтите подробнее о PIVOT здесь и посмотрите, говорит ли вам что-нибудь этот образец.":
Я много читал и не нашел никакого решения. Вот почему мой вопрос здесь....
Afzaal Ahmad Zeeshan
Как это динамически создаваемые операторы SQL нет язык SQL?
0x01AA
Серьезно?
Конечно, в конце концов динамически создаваемый sql-элемент-это sql.
Как я уже сказал в вопросе: "я знаю, как получить желаемый результат с помощью динамически создаваемых SQL-файлов."
Но мой вопрос заключается в том, Могу ли я сделать это со стандартным sql без "внешней" помощи.