请问sql中怎么实现字段的动态查询?

比如说select字段1,字段2fromtable1leftjointable2on......其中字段1是已经确定的,但字段2还不确定,需要根据字段1返回的记录再具体确... 比如说 select 字段1,字段2 from table1 left join table2 on......
其中字段1是已经确定的,但字段2还不确定,需要根据字段1返回的记录再具体确定每条记录所对应的字段2。请问怎么实现?求教高手
展开
 我来答
badkano
2015-07-13 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885375
团长

向TA提问 私信TA
展开全部

用动态sql即可实现。

如student表中有如下内容:

现在查询条件不定,但只能是一个字段,如:可能会查sex为男的人,可能会查name为张三的人。可以这样写一个简单的存储过程

declare @col varchar(20)
declare @sql varchar(2000)
declare @str varchar(20)
set @col='sex'
set @str='男'
set @sql='select * from student where '+@col+'='''+@str+''''
exec (@sql)

结果就是这样的:

ttpsan520
2013-06-28 · TA获得超过404个赞
知道小有建树答主
回答量:312
采纳率:100%
帮助的人:315万
展开全部

给你做了一个简单的例子 ,你自己思考一下

USE tempdb 
GO
IF OBJECT_ID('TABLE1') IS NOT NULL
DROP TABLE TABLE1
GO
CREATE TABLE TABLE1
(cWhCode NVARCHAR(20))
INSERT INTO TABLE1
SELECT 'W01' UNION ALL 
SELECT 'W02' UNION ALL
SELECT 'W03' UNION ALL
SELECT 'W04' UNION ALL
SELECT 'W05' 
GO
IF OBJECT_ID('TABLE2') IS NOT NULL
DROP TABLE TABLE2
GO
CREATE TABLE TABLE2
(
W01 NVARCHAR(20),
W02 NVARCHAR(20),
W03 NVARCHAR(20),
W04 NVARCHAR(20),
W05 NVARCHAR(20)

)

DECLARE @COL NVARCHAR(1000)
SET @COL=''
--拼接动态语句
SELECT  @COL=@COL+',' + CWHCODE FROM TABLE1 
       SET @COL= STUFF(@COL,1,1,'')
--动态查询
exec ('SELECT ' + @COL + ' FROM TABLE2')

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-06-28
展开全部
CREATE TABLE #test (
  id  INT,
  start_date  DATE,
  end_date  DATE
);

INSERT INTO #test VALUES(1, '2013-01-01','2013-01-31');
INSERT INTO #test VALUES(1, '2013-03-01','2013-03-07');
INSERT INTO #test VALUES(2, '2013-01-01','2013-03-07');
INSERT INTO #test VALUES(2, '2013-02-01','2013-02-07');
INSERT INTO #test VALUES(2, '2013-03-01','2013-03-07');
INSERT INTO #test VALUES(2, '2013-04-01','2013-04-07');

-- 这里假设  字段1是  id
-- 字段2不确定,需要根据字段1返回的记录再具体确定每条记录所对应的字段2。
-- 假如字段1= 1, 则返回 start_date,  否则返回 end_date

SELECT
  id  AS  [字段1],
  CASE WHEN id = 1 THEN start_date ELSE end_date END AS [字段2]
FROM
  #test;

字段1         字段2
----------- ----------------
          1       2013-01-01
          1       2013-03-01
          2       2013-03-07
          2       2013-02-07
          2       2013-03-07
          2       2013-04-07

(6 行受影响)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式