簡體   English   中英

你如何在SQL Server中的Bit數據類型上進行PIVOT?

[英]How do you PIVOT on a Bit datatype in SQL Server?

這可能是一個非常簡單的問題。 我想要做的就是將列放入一個數據類型有點的行。

SUM,MIN,MAX不適用於位。 COUNT有效,但我真的不想數。 我只想將所有的東西從列移到行中,就像我拿了一把剪刀,切割信息並移動-90度。

解決方案是將位數據類型轉換為聚合函數中接受的數據類型。 例如,

SELECT MAX(CAST(BitColumn AS TINYINT))

將BitColumn值轉換為tinyint數據類型。 如果BitColumn包含至少一個值1,則該語句返回1; 否則,它返回0(除非所有值都為null)。

假設如下:

CREATE TABLE MyTable (ID INT, Name VARCHAR(10), BitColumn BIT);

INSERT INTO MyTable VALUES (1, 'Name 1', 1);
INSERT INTO MyTable VALUES (1, 'Name 2', 0);
INSERT INTO MyTable VALUES (1, 'Name 3', 1);
INSERT INTO MyTable VALUES (2, 'Name 1', 1);
INSERT INTO MyTable VALUES (2, 'Name 2', 1);
INSERT INTO MyTable VALUES (2, 'Name 3', 1);
INSERT INTO MyTable VALUES (3, 'Name 1', 0);
INSERT INTO MyTable VALUES (3, 'Name 2', 0);
INSERT INTO MyTable VALUES (3, 'Name 3', 0);

您可以使用以下查詢來轉動此數據

SELECT ID,
    CAST(MAX(CASE Name WHEN 'Name 1' THEN CAST(BitColumn AS TINYINT) ELSE NULL END) AS BIT) AS [Name 1],
    CAST(MAX(CASE Name WHEN 'Name 2' THEN CAST(BitColumn AS TINYINT) ELSE NULL END) AS BIT) AS [Name 2],
    CAST(MAX(CASE Name WHEN 'Name 3' THEN CAST(BitColumn AS TINYINT) ELSE NULL END) AS BIT) AS [Name 3]
FROM MyTable
GROUP BY ID
ORDER BY ID

在這種情況下,最大BitColumn值從tinyint轉換回bitint。 這不是必需的。

結果是

ID  Name 1  Name 2  Name 3
--------------------------
1   1       0       1
2   1       1       1
3   0       0       0

對於SQL Server 2005及更高版本,備用查詢使用PIVOT運算符

SELECT ID, [Name 1], [Name 2], [Name 3]
FROM
    (
    SELECT ID, Name, CAST(BitColumn AS TINYINT) AS BitColumn
    FROM MyTable
    ) as SourceTable
PIVOT
(
MAX(BitColumn) FOR Name in ([Name 1], [Name 2], [Name 3])
) AS PivotTable
SELECT [1], [2], [3]
FROM
    (
    SELECT ID, CAST(BitColumn AS TINYINT) AS INTColumn
    FROM MyTable
    ) as SourceTable
PIVOT
(
MAX(INTColumn) FOR ID in ([1], [2], [3])
) AS PivotTable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM