【发布时间】:2015-06-30 06:24:37
【问题描述】:
我需要像时间表一样显示每周的单用户时间表,
场景:一个教师在同一天分配到多个批次(例如:BBA,数学和上午 1 和 2 小时)和(MBA,数学,下午 3 和 4 小时),例如(30-06 -2015)。我的gridview 行将存储为1 和2 行存储为2 等等............
我的表定义:
CREATE TABLE [dbo].[test] (
[datedif] NVARCHAR (50) NOT NULL,
[hour] INT NULL,
[subject] NVARCHAR (MAX) NULL,
[faculty] NVARCHAR (MAX) NULL,
[attendence] BIT NULL,
[dayweek] NVARCHAR (50) NULL,
[weekmonth] NVARCHAR (MAX) NULL,
[batch] NVARCHAR (MAX) NULL,
[section] NVARCHAR (MAX) NULL,
[session] NVARCHAR (MAX) NULL
);
表格看起来像:
Datefdiff | hour | subject | faulty| batch
----------+-------+----------+---------+-------+----------+--------+-------+----------+---------+-------
30-06-2015| 1| Maths | Kevin | BBA
30-06-2015| 2| Science | Amal | MBA
30-06-2015|3 | chemistry|Jaya |BBA
30-06-2015|4 | chemistry|Jaya |BBA
30-06-2015|5 | chemistry|Jaya |BBA
31-06-2015 |1| science | Amal |BBA
31-06-2015 |2| Maths | kevin |BBA
31-06-2015 |3| Science | Amal |BBA
31-06-2015 |4 | chemistry|Jaya |BBA
31-06-2015 |5| science | Amal |BBA
预计只为教员提供输出:Amal
Datefdiff |hour|subject| batch |hour|subject | batch |faculty|hour | subject | batch | hour | subject | batch| hour | subject | batch |
----------+-------+----------+-------+-------+----------+-------+-------+----------+
30-06-2015| 1 | Maths| BBA| 2| Science | MBA | 3| Science | BBA| 4| chemistry| BBA | 5 |Physics |MBA
31-06-2015| 1 | Maths| BBA| 2| Science | MBA | 3| Science | BBA| 4| chemistry| BBA | 5 |Physics |MBA
【问题讨论】:
-
那是一个糟糕的桌子设计。您不应该存储数据来模仿某些显示/表单。数据应该是不可透视的,以便所有例如
subject数据最终出现在 same 列中。然后添加一个可以存储数字 1-5 的额外列,并为该列指定一个 name,以解释该数据代表什么(您当前嵌入到表 元数据中的数据i> 错误) -
感谢您的建议,但如果我可以通过在 where 子句中使用它来显示教员日程的详细信息,那将很有帮助,同时我将尝试将表定义更改为你建议的。
-
在更改表定义时,请记住日期值应存储在日期数据类型中,而 nvarchar(max) 用于极长的 unicode 字符串。由于您的字符串似乎既简短又简单,您可以使用 varchar(50) 或任何其他适合您需要的长度。另外,我建议对您的数据进行规范化 - 有一个主题表、一个批处理表、一个故障表等等。
-
Nvarchar(max) - 坏主意!!!
-
您的表格未标准化。修复您的数据库设计。
标签: c# sql sql-server tsql