Ist es möglich, nach Elementen (wie in COLUMN LIKE='Value%'
) in einer PIVOT
Tabelle zu gruppieren ? Ich habe eine Tabelle [DBT]. [Status], die verschiedene Status (von Datenbanken, Instanzen usw.) enthält, und möchte nicht alle PROD- und TEST-Werte als einzelne Werte schwenken / abfragen, sondern sie gruppieren.
Eg Statt Spalten für die Zustände mit Prod
, Prod ACC
, Prod APP
, .. etc. Ich würde nur eine Spalte die Werte für die Aufnahme Name LIKE 'Prod%'
und Name LIKE 'Test%'
.
Was ich bisher habe:
Tabellendefinition
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
Tabellenwerte
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')
Die Pivot-Statustabelle
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
Bisherige Ausgabe
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 <> Geige
Die dbfiddle bisher.
Frage
Anstatt mehrere Zeilen für die verschiedenen Test...
und Prod....
Werte zu haben, würde ich es vorziehen, sie gruppiert zu haben, ähnlich wie die folgenden:
DB Status | Test | Prod | Migrated | Offline | Reserved
--------------- | ---- | ---- | -------- | ------- | --------
Database Status | 4 | 4 | 1 | 1 | 1
Ich habe keine Ahnung, wie ich meine Frage lösen soll. (Um ehrlich zu sein, habe ich PIVOT erst gestern nach ausgiebigen Versuchen und Irrtümern verstanden).
Diese Frage steht in engem Zusammenhang mit der Frage, wie Summen / Zählungen von gruppierten Elementen über mehrere Tabellen erstellt werden, die ich bereits gestellt habe. Die Tabellen [DBT]. [Instanz] und [DBT]. [Datenbank] enthalten eine Spalte mit der [StatusID], die der Tabelle entspricht, die wir gerade betrachten.