Có thể nhóm theo các yếu tố (như trong COLUMN LIKE='Value%'
) trong một PIVOT
bảng không? Tôi có một bảng [DBT]. [Trạng thái] chứa các trạng thái khác nhau (của cơ sở dữ liệu, phiên bản, v.v.) và không muốn xoay vòng / truy vấn tất cả các giá trị SẢN PHẨM và TEST dưới dạng các giá trị đơn lẻ, nhưng nhóm chúng lại.
Ví dụ: Thay vì có các cột cho các trạng thái Prod
, Prod ACC
, Prod APP
, .. vv Tôi sẽ chỉ có một cột chứa các giá trị cho Name LIKE 'Prod%'
và Name LIKE 'Test%'
.
Những gì tôi có cho đến nay:
Bảng định nghĩa
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
Giá trị bảng
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')
Bảng trạng thái xoay vòng
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
Đầu ra cho đến nay
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 <>
Các dbfiddle cho đến nay.
Câu hỏi
Thay vì có nhiều hàng cho các giá trị Test...
và Prod....
giá trị khác nhau , tôi muốn nhóm chúng lại, tương tự như sau:
DB Status | Test | Prod | Migrated | Offline | Reserved
--------------- | ---- | ---- | -------- | ------- | --------
Database Status | 4 | 4 | 1 | 1 | 1
Tôi không biết làm thế nào để giải quyết câu hỏi của mình. (Thành thật mà nói tôi chỉ mới nắm được PIVOT ngày hôm qua sau khi dùng thử và lỗi rộng rãi).
Câu hỏi này liên quan một cách lỏng lẻo đến câu hỏi Làm thế nào để tạo tổng / số lượng các mục được nhóm qua nhiều bảng tôi đã hỏi. Các bảng [DBT]. [Instance] và [DBT]. [Database] chứa một cột có [StatusID] tương ứng với bảng mà chúng ta đang xem bây giờ.