2012-01-06 52 views
2

我正在使用VS2005 C#和SQL2005。从多个列中检索数据并在单个列中显示

我想从多列中检索数据并合并它们,用逗号分隔它们。

E.g.在我的SQL表数据的UserData

No. | Username | Role 1 | Role 2 | Role 3 |

1 | Jimmy | USER | READONLY | WRITE |

数据,我想在我的GridView GridView1显示:

No. | Username | Roles |

1 | Jimmy | USER, READONLY, WRITE |

如何使用SELECT语句来合并3列中的数据并合并它们,用逗号分隔数据并在GridView中列出它们?

谢谢


编辑

我已经使用鲨鱼和门提供的方法试过,但我想删除逗号,如果在角色列中的数据是空的。现在

的情况是,Roles列将这个样子,如果角色2和角色3是空的: USER,,

我可以知道我怎么能集团,到变量以及因此它不会如果该值显示是空的?

+1

您可能需要检查空值,因为连接具有空值的列会导致空值。请改用此SQL查询:select username,IsNull([role 1],'')+','+ IsNull([role 2],'')+','+ IsNull([role 3],')as UserData的角色 – Mun 2012-01-06 03:03:39

+1

@RUiHAO看看我编辑过的帖子。它使用'ISNULL()'来获得你想要的结果。 – 2012-01-06 03:43:40

+1

@那个查询会把逗号或双逗号用不同的NULL值加上。看看我的答案。在'ISNULL()'函数中组合列和逗号字符,这应该是OP正在寻找的东西。 – 2012-01-06 03:44:35

回答

1

下面是SQL查询:

select 
    username, 
    isnull(nullif([role 1], '') + ', ', '') + 
    isnull(nullif([role 2], '') + ', ', '') + 
    isnull(nullif([role 3], ''), '') as Roles 
from UserData 

然后为网格视图代码:

SqlConnection conn = new SqlConnection(YourConnectionStringHere); 
SqlCommand cmd = new SqlCommand(); 
cmd.Connection = conn; 
cmd.CommandText = 
    "select " + 
    " username, " + 
    " isnull(nullif([role 1], '') + ', ', '') + " + 
    " isnull(nullif([role 2], '') + ', ', '') + " + 
    " isnull(nullif([role 3], ''), '') as Roles " + 
    "from UserData"; 

SqlDataAdapter sda = new SqlDataAdapter(cmd); 
Datatable YourData = new DataTable(); 

try 
{ 
    sda.Fill(YourData); 

    GridView1.DataSource = YourData; 
    GridView1.Bind(); 
} 
catch 
{ 
    sda.Dispose(); 
    // handle your error 
} 
+0

嗨,我已经实施了该方法。但是,如果值为空,是否有删除','的方法?当角色1,2或3为空时,我显示数据时遇到一些麻烦,'''也会显示出来 – gymcode 2012-01-06 03:45:34

+0

@RUiHAO这正是查询所要做的。它检查'[role x] +',''的组合。如果这是'NULL'(如果'[role x]'是NULL),那么它将不会显示不必要的逗号。 – 2012-01-06 03:47:38

+0

@RUiHAO当你说“空”时,你是什么意思? NULL或空字符串('''')?这是两个完全不同的东西。上面的解决方案是为NULL值,而不是空字符串('''')。 – 2012-01-06 03:49:08

2

你应该这样做在存储过程,然后绑定的GridView到存储过程:

SELECT No., Username, CAST(Role1 AS varchar(1024)+ ', ' + Role2 + ', ' + Role3) 
相关问题