У меня есть таблица в SQL Server, которая выглядит следующим образом:
| EntityId | AttributeName | ValueSource | ValueText |
|----------|---------------|-------------|----------------|
| 1 | Name | Customer | John Smith |
| 1 | Age | Customer | 25 |
| 1 | Address | Lookup | 123 Main St |
| 2 | Name | Customer | Jane Doe |
| 2 | Age | Customer | 30 |
| 2 | Address | Customer | 1 Example Road |
А именно, помимо стандартных столбцов EAV, в ней также есть столбец метаданных о значении.
Моя цель здесь состоит в том, чтобы развернуть таблицу в реляционном формате по следующим строкам:
| EntityId | Name | NameSource | Age | AgeSource | Address | AddressSource |
|----------|------------|------------|-----|-----------|----------------|---------------|
| 1 | John Smith | Customer | 25 | Customer | 123 Main St | Lookup |
| 2 | JaneDoe | Customer | 30 | Customer | 1 Example Road | Customer |
Однако я довольно новичок в сводках T-SQL, и хотя могу выполнять стандартную сводку, игнорируяValueSource
, я не могу заставить и 1010 *, и ValueText
развернуться в результирующей таблице. Я надеялся
SELECT EntityId, val.Name, val.Age, val.Address, src.Name AS NameSource, src.Age AS AgeSource, src.Address AS AddressSource
FROM #PivotExample
PIVOT (MAX (ValueText) FOR AttributeName IN (Name, Age, Address)) AS val
PIVOT (MAX (ValueSource) FOR AttributeName IN (Name, Age, Address)) AS src;
, но это просто говорит мне, что AttributeName
- это недопустимое имя столбца во втором стержне, и я не уверен, куда идти дальше.