如何改变数据显示方式

wwfxgm 2016-12-15 06:57:32


我想改变成下图所示。有没有什么好的办法?



表的结构代码:

DROP TABLE [dbo].[BB]
GO
CREATE TABLE [dbo].[BB] (
[任课教师] nvarchar(255) NULL ,
[课程名称] nvarchar(255) NULL ,
[授课班级] nvarchar(255) NULL ,
[学时] nvarchar(255) NULL ,
[学生数] nvarchar(255) NULL
)


GO

-- ----------------------------
-- Records of BB
-- ----------------------------
INSERT INTO [dbo].[BB] ([任课教师], [课程名称], [授课班级], [学时], [学生数]) VALUES (N'李一平(上)', N'就业指导', N'A13生技,A13生科', N'12', N'66')
GO
GO
INSERT INTO [dbo].[BB] ([任课教师], [课程名称], [授课班级], [学时], [学生数]) VALUES (N'李子树(上)', N'就业指导', N'A13计算机,A13资环', N'12', N'55')
GO
GO
INSERT INTO [dbo].[BB] ([任课教师], [课程名称], [授课班级], [学时], [学生数]) VALUES (N'李子树(下)', N'大学生职业生涯规划与就业指导', N'A16生技,A16生科', N'12', N'58')
GO
GO
INSERT INTO [dbo].[BB] ([任课教师], [课程名称], [授课班级], [学时], [学生数]) VALUES (N'李子树(下)', N'大学生职业生涯规划与就业指导', N'A16计算机1,A16计算机2', N'12', N'62')
GO


...全文
122 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwfxgm 2016-12-16
  • 打赏
  • 举报
回复
引用 6 楼 roy_88 的回复:
'(上)'--改为"上",去掉括号试试
版主。找到问题原因了。 上次另外一个版主说 新版sql server2016 linux版本出来了,我安装了一个。一直在测试。结果今天遇到charindex。悲剧了,测试了半天,换到windows系统下面的sql server2016.一点问题也没有。 在linux的版本就是不行。
中国风 2016-12-16
  • 打赏
  • 举报
回复
'(上)'--改为"上",去掉括号试试
wwfxgm 2016-12-16
  • 打赏
  • 举报
回复
SELECT
	CASE
WHEN CHARINDEX('(上)', a.任课教师) > 0 THEN
	1
ELSE
	0
END AS val
FROM
	bb a;
这个语句显示出来的结果。全部是 0. 单独运行 charindex 可以找到。 真是奇了怪了。
wwfxgm 2016-12-16
  • 打赏
  • 举报
回复
会不会是 括号的缘故,我用了中文的括号也试过,英文状态下 输入的括号也试过。都无法找出来,感觉charindex就是找不出字符的位置。
wwfxgm 2016-12-16
  • 打赏
  • 举报
回复
引用 2 楼 roy_88 的回复:
e.g.
DROP TABLE [dbo].[BB]
GO
CREATE TABLE [dbo].[BB] (
[任课教师] nvarchar(255) NULL ,
[课程名称] nvarchar(255) NULL ,
[授课班级] nvarchar(255) NULL ,
[学时] nvarchar(255) NULL ,
[学生数] nvarchar(255) NULL 
)


GO

-- ----------------------------
-- Records of BB
-- ----------------------------
INSERT INTO [dbo].[BB] ([任课教师], [课程名称], [授课班级], [学时], [学生数]) VALUES (N'李一平(上)', N'就业指导', N'A13生技,A13生科', N'12', N'66')
GO
GO
INSERT INTO [dbo].[BB] ([任课教师], [课程名称], [授课班级], [学时], [学生数]) VALUES (N'李子树(上)', N'就业指导', N'A13计算机,A13资环', N'12', N'55')
GO
GO
INSERT INTO [dbo].[BB] ([任课教师], [课程名称], [授课班级], [学时], [学生数]) VALUES (N'李子树(下)', N'大学生职业生涯规划与就业指导', N'A16生技,A16生科', N'12', N'58')
GO
GO
INSERT INTO [dbo].[BB] ([任课教师], [课程名称], [授课班级], [学时], [学生数]) VALUES (N'李子树(下)', N'大学生职业生涯规划与就业指导', N'A16计算机1,A16计算机2', N'12', N'62')
GO

SELECT  LEFT(a.[任课教师], CHARINDEX('(', a.[任课教师] + '(') - 1) AS [任课教师] ,
        a.[课程名称] ,
        a.[授课班级] ,
        a.[学时] ,
        a.[学生数] ,
        CASE WHEN CHARINDEX('(上)', a.任课教师) > 0
             THEN RTRIM(DATENAME(yy, GETDATE()) - 1) + '-' + DATENAME(yy,
                                                              GETDATE())
             ELSE DATENAME(yy, GETDATE()) + '-' + RTRIM(DATENAME(yy, GETDATE())
                                                        + 1)
        END AS XN,
		b.XQ
FROM    BB AS a
	INNER JOIN (SELECT [课程名称],COUNT(DISTINCT 任课教师) AS XQ FROM BB GROUP BY [课程名称]) AS b ON a.[课程名称]=b.[课程名称]
ORDER BY XN;
/*
任课教师	课程名称	授课班级	学时	学生数	XN	XQ
李一平	就业指导	A13生技,A13生科	12	66	2015-2016	2
李子树	就业指导	A13计算机,A13资环	12	55	2015-2016	2
李子树	大学生职业生涯规划与就业指导	A16生技,A16生科	12	58	2016-2017	1
李子树	大学生职业生涯规划与就业指导	A16计算机1,A16计算机2	12	62	2016-2017	1
*/
版主,我关键是这里找不出来,不知道你咋是成功的。CASE WHEN CHARINDEX('(上)', a.任课教师) > 0 THEN RTRIM(DATENAME(yy, GETDATE()) - 1) + '-' + DATENAME(yy, GETDATE()) ELSE DATENAME(yy, GETDATE()) + '-' + RTRIM(DATENAME(yy, GETDATE()) + 1) END AS XN 这里,我永远都是执行else 后面的语句。也就是2016-2017 的结果。
中国风 2016-12-15
  • 打赏
  • 举报
回复
e.g.
DROP TABLE [dbo].[BB]
GO
CREATE TABLE [dbo].[BB] (
[任课教师] nvarchar(255) NULL ,
[课程名称] nvarchar(255) NULL ,
[授课班级] nvarchar(255) NULL ,
[学时] nvarchar(255) NULL ,
[学生数] nvarchar(255) NULL 
)


GO

-- ----------------------------
-- Records of BB
-- ----------------------------
INSERT INTO [dbo].[BB] ([任课教师], [课程名称], [授课班级], [学时], [学生数]) VALUES (N'李一平(上)', N'就业指导', N'A13生技,A13生科', N'12', N'66')
GO
GO
INSERT INTO [dbo].[BB] ([任课教师], [课程名称], [授课班级], [学时], [学生数]) VALUES (N'李子树(上)', N'就业指导', N'A13计算机,A13资环', N'12', N'55')
GO
GO
INSERT INTO [dbo].[BB] ([任课教师], [课程名称], [授课班级], [学时], [学生数]) VALUES (N'李子树(下)', N'大学生职业生涯规划与就业指导', N'A16生技,A16生科', N'12', N'58')
GO
GO
INSERT INTO [dbo].[BB] ([任课教师], [课程名称], [授课班级], [学时], [学生数]) VALUES (N'李子树(下)', N'大学生职业生涯规划与就业指导', N'A16计算机1,A16计算机2', N'12', N'62')
GO

SELECT  LEFT(a.[任课教师], CHARINDEX('(', a.[任课教师] + '(') - 1) AS [任课教师] ,
        a.[课程名称] ,
        a.[授课班级] ,
        a.[学时] ,
        a.[学生数] ,
        CASE WHEN CHARINDEX('(上)', a.任课教师) > 0
             THEN RTRIM(DATENAME(yy, GETDATE()) - 1) + '-' + DATENAME(yy,
                                                              GETDATE())
             ELSE DATENAME(yy, GETDATE()) + '-' + RTRIM(DATENAME(yy, GETDATE())
                                                        + 1)
        END AS XN,
		b.XQ
FROM    BB AS a
	INNER JOIN (SELECT [课程名称],COUNT(DISTINCT 任课教师) AS XQ FROM BB GROUP BY [课程名称]) AS b ON a.[课程名称]=b.[课程名称]
ORDER BY XN;
/*
任课教师	课程名称	授课班级	学时	学生数	XN	XQ
李一平	就业指导	A13生技,A13生科	12	66	2015-2016	2
李子树	就业指导	A13计算机,A13资环	12	55	2015-2016	2
李子树	大学生职业生涯规划与就业指导	A16生技,A16生科	12	58	2016-2017	1
李子树	大学生职业生涯规划与就业指导	A16计算机1,A16计算机2	12	62	2016-2017	1
*/
中国风 2016-12-15
  • 打赏
  • 举报
回复
e.g.
SELECT LEFT([任课教师],CHARINDEX('(',[任课教师]+'(')-1) AS [任课教师], [课程名称], [授课班级], [学时], [学生数] FROM BB
/*
任课教师	课程名称	授课班级	学时	学生数
李一平	就业指导	A13生技,A13生科	12	66
李子树	就业指导	A13计算机,A13资环	12	55
李子树	大学生职业生涯规划与就业指导	A16生技,A16生科	12	58
李子树	大学生职业生涯规划与就业指导	A16计算机1,A16计算机2	12	62
*/

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧