¿Es posible agrupar por elementos (como en COLUMN LIKE='Value%') en una PIVOTtabla? Tengo una tabla [DBT]. [Estado] que contiene varios estados (de bases de datos, instancias, etc.) y no quiero pivotar / consultar todos los valores PROD y TEST como valores únicos, sino agruparlos.
Por ejemplo, lugar de tener columnas para los estados Prod, Prod ACC, Prod APP, .. etc que tendría sólo una columna que contiene los valores de Name LIKE 'Prod%'y Name LIKE 'Test%'.
Lo que tengo hasta ahora:
Definición de tabla
CREATE TABLE [DBT].[Status](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Status] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY],
CONSTRAINT [IX_Status] UNIQUE NONCLUSTERED
(
[Name] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
GO
Tabla de valores
INSERT INTO [DBT].[Status]
(
-- ID -- this column value is auto-generated
Name
)
VALUES
('Test ACC'),
('Test APP'),
('Test DBA'),
('Prod ACC'),
('Prod APP'),
('Prod DBA'),
('Prod'),
('Test'),
('Migrated'),
('Offline'),
('Reserved')
La tabla de estado pivotada
SELECT 'Database Status' AS [DB Status],
[1] AS [Test ACC], [2] AS [Test APP], [3] AS [Test DBA], [4] AS [Prod ACC], [5] AS [Prod APP], [6] AS [Prod DBA], [7] AS [Prod], [8] AS [Test], [9] AS [Migrated], [10] AS [Offline], [11] AS [Reserved]
FROM
(
SELECT ID, Name FROM [DBT].[Status]
) AS Source
PIVOT
(
COUNT(Name) FOR ID IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11])
) AS PivotTable
Salida hasta ahora
DB Status Test ACC Test APP Test DBA Prod ACC Prod APP Prod DBA Prod Test Migrated Offline Reserved
--------------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
Database Status 1 1 1 1 1 1 1 1 1 1 1
db <> violín
El dbfiddle hasta ahora.
Pregunta
En lugar de tener varias filas para los diversos Test... y Prod....valores, preferiría agruparlos, de forma similar a lo siguiente:
DB Status | Test | Prod | Migrated | Offline | Reserved
--------------- | ---- | ---- | -------- | ------- | --------
Database Status | 4 | 4 | 1 | 1 | 1
No tengo idea de cómo resolver mi pregunta. (Para ser honesto, acabo de comprender PIVOT ayer después de extensas pruebas y errores).
Esta pregunta está poco relacionada con la pregunta Cómo crear sumas / recuentos de elementos agrupados en varias tablas que ya he preguntado. Las tablas [DBT]. [Instancia] y [DBT]. [Base de datos] contienen una columna con el [StatusID] que corresponde a la tabla que estamos viendo ahora.
fuente
