[英]C# - PIVOT on a Bit datatype in SQL Server & assign result to datagridview
[英]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.