oracle数据库项目需求,通过sql server 数据库中的sql语句实现项目需求

最近都关注oracle,今天没有办法,因为项目使用的是sql server数据库,许多东西都忘记的差不多了。需要实现一个功能,本来可以使用程序去实现,但是我不爽,一定想通过数据库本身来解决这个问题。问题大概是:

项目中是要实现在别人寻找到宝贝后,要回答一个问题,这个问题暂时定为有四个选项,其中一个正确的,在数据库中使用两张表来实现,一张是记录问题的题目和答案(表一),另一张表专门用来记录每个题目中的选项(表二),表的sql脚本如下:

表一:c4ae42ac734c127d504732a52450dadc.png

USE [xb_new]

GO

/****** 对象:  Table [dbo].[Question]    脚本日期: 06/13/2010 21:17:05 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[Question](

[id] [int] IDENTITY(1,1) NOT NULL,

[iss_id] [int] NULL,

[answer] [nvarchar](50) NULL,

[question] [nvarchar](150) NULL,

CONSTRAINT [PK_Question_] PRIMARY KEY CLUSTERED

(

[id] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY]

表中数据如下:

18ad9c3e405d1e6b095cfc64ab86ec32.png

表二:

USE [xb_new]

GO

/****** 对象:  Table [dbo].[Qusetion_Answer]    脚本日期: 06/13/2010 21:18:12 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[Qusetion_Answer](

[id] [int] IDENTITY(1,1) NOT NULL,

[qid] [int] NOT NULL,

[qtext] [nvarchar](50) NOT NULL,

[qvalue] [nvarchar](2) NULL

) ON [PRIMARY]

表中数据如下

c98c18512a085d01ae633eb7035c21c0.png

现在需求是:把一个题目的四个选项合并到一起,并为了在网页上换行,显示题目,显示答案。

其中难道是行列转换,以前在orcal中都是使用decode来实现的,现在郁闷的sql server中竟然不支持这个函数,只能我在oracle中比较讨厌的case(主要要多写很多when、then、end我不喜欢,而且还容易忘记格 式)来实现。实现sql脚本如下:

SELECT a,q,aa+'
'+bb+'
'+cc+'
'+dd result FROM

(SELECT DISTINCT answer a,Question.Question q,

aa=MAX(CASE qvalue WHEN 'A' THEN '(A)'+qtext END),

bb=max(CASE qvalue WHEN 'B' THEN '(B)'+qtext END),

cc=max(CASE qvalue WHEN 'C' THEN '(C)'+qtext END),

dd=max(CASE qvalue WHEN 'D' THEN '(D)'+qtext END)

FROM dbo.Question,dbo.Qusetion_Answer

WHERE qid=dbo.Question.id GROUP BY dbo.Question.answer,Question.Question) temp;

结果如下:

1cccff908b6f93335160cf5ff2436e9e.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值