【问题标题】:Grouping relational data into a single Datatable将关系数据分组到单个数据表中
【发布时间】:2015-08-03 08:56:12
【问题描述】:

我正在使用 WinForms C# 开发一个系统。

我有两个关系表:

USER_PROFILE
| ID | NAME |
  1    prof1

PERMISSIONS
| UPROFILE_ID | PERMISSION | 
      1           abc
      1           acb
      1           bca

我需要在屏幕上显示个人资料。
我不知道这是否最适合我的情况,或者如何实施。我的想法是像这样在 DataGridView 中显示:

| Profile | Permission1 | Permission2 | Permission3 | 
   prof1        abc           acb           bca

有什么建议吗?

提前致谢。

【问题讨论】:

  • 加入表格并使用 PIVOT 结构
  • 您可以通过 SQL 或 LINQ 在数据访问代码中对表运行联接。我喜欢 Randy 的 PIVOT 数据输出理念。
  • 权限有固定数量吗?每个人都有相同数量的权限吗?您可能需要在 datagridview 中动态构建列。
  • 是的,列数会有所不同,我还需要为列命名。我认为解决方案可能是构建数据表。这样,繁重的逻辑将在代码上,而不是在查询中。我去google一下,谢谢。
  • 对如何动态处理有什么建议吗?

标签: c# sql winforms oracle datagridview


【解决方案1】:

您可以使用“大小写切换”将行转换为列。在实际的选择查询中,您可以动态构建列列表。 示例:-

SQL> select id,name from user_profile;

    ID NAME

     1 U1
     2 U2

SQL> select id,pname from per order by 1;

    ID PNAME

     1 A
     1 B
     2 C

SQL> select distinct u.name user_name, case when p.pname='A'then p.pname else null end permission1, case when p.pname='B' then p.pname else null end permission2 from user_profile u, per p where u.id=p.id order by 1;

USER_NAME            PERMISSION1          PERMISSION2
-------------------- -------------------- --------------------
U1                   A
U1                                        B
U2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    相关资源
    最近更新 更多