SQL server 两个查询结果拼接成一个,语句改怎样修改?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server 两个查询结果拼接成一个,语句改怎样修改?相关的知识,希望对你有一定的参考价值。
以下语句:select *
from
(select UF_DeptID from TM_UF_Dept where TM_StoreID = '004') b,
(select UF_CusID from TM_UF_Cus where TM_ClientID = '100') c
其中b表查询有结果,c表查询没有结果,为什么拼接后结果都是空?
这两个表没有关联的字段,怎样写条件?
追答select * from中去掉*和from试试
参考技术B 因为同时查两个表相当于内连接,一个表为空,同时查两个肯定为空了本回答被提问者采纳1、sql查询语句时怎么把几个字段拼接成一个字段?这几个字段是整型的。
1、语句如下:
select 字段A, 字段B, 字段A + 字段B as 字段C From 表1
注:字段A加上字段B的计算列命名为字段C
2、计算列
计算列由可以使用同一表中的其他列的表达式计算得来。表达式可以是非计算列的列名、常量、函数,也可以是用一个或多个运算符连接的上述元素的任意组合。表达式不能为子查询。
原题的答案就是“计算列”。
扩展资料:
计算列应用范围
计算列可用于选择列表、WHERE 子句、ORDER BY 子句或任何可使用正则表达式的其他位置,但下列情况除外:
用作 CHECK、FOREIGN KEY 或 NOT NULL 约束的计算列必须标记为 PERSISTED。如果计算列的值由具有确定性的表达式定义,并且索引列中允许使用计算结果的数据类型,则可将该列用作索引中的键列,或者用作 PRIMARY KEY 或 UNIQUE 约束的一部分。
例如,如果表中含有整数列 a 和 b,则可以对计算列 a + b 创建索引,但不能对计算列 a + DATEPART(dd, GETDATE()) 创建索引,因为在后续调用中,其值可能发生改变。
计算列不能作为 INSERT 或 UPDATE 语句的目标。
数据库引擎基于使用的表达式自动确定计算列的为 Null 性。即使只有非空列,大多数表达式的结果也“认为”可为空值,因为下溢或溢出生成的结果也可能为空。使用带 AllowsNull 属性的 COLUMNPROPERTY 函数可查明表中任何计算列的为 Null 性。
通过指定 ISNULL (check_expression, constant) 可以将可为空值的表达式转换为不可为空值的表达式,其中, constant 是可替换所有空结果的非空值。
参考资料:
百度百科.计算列
通过GROUP_CONCAT实现,具体过程如下:
1、原SQL语句如下:
SELECT q.`id`, q.`questionContent`, o.`questionOption` FROM `exam_question` q
INNER JOIN `exam_question_option` o ON q.`id` = o.`questionId`
WHERE q.`questionType` = 1
2、此时的查询结果如下表:
3、现在根据ID,将 questionOption 的字段整合拼接在一起,更改后的SQL语句如下:
SELECT q.`id`, q.`questionContent`, GROUP_CONCAT(o.`questionOption`) AS questionOptionList FROM `exam_question` q
INNER JOIN `exam_question_option` o ON q.`id` = o.`questionId`
WHERE q.`questionType` = 1
GROUP BY q.`id`
3、执行结果如下:
扩展资料:
函数重点:不要忘了 GROUP BY id。
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']),group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函
数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。
参考技术BSQL中字符型字段的拼接可以使用“+”或者“||”来实现,不过考虑到你问题中这几个字段属于整形字段,需要先将整形进行数据类型转换后,再使用“+”或者“||”拼接。
拼接的语法为:
SELECT CAST(COLUMN1 AS VARCHAR(10)) + '-' + CAST(COLUMN2 AS VARCHAR(10)+ '-' + ........) as P FROM TABLE ;
或者:
SELECT CAST(COLUMN1 AS VARCHAR(10)) || '-' + CAST(COLUMN2 AS VARCHAR(10) || '-' || ........) as P FROM TABLE ;
其中CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。
语法:CAST (expression AS data_type)
举个例子:已知表 TableA,含ID、yy、mm、dd四个整数型字段。
使用sql将yy、mm、dd三个字段进行拼接,语法:
select ID,cast(yy as varchar(10))+ '-' + cast(mm as varchar(10)) + '-' + cast(dd as varchar(10)) as pp from TableA;
则输出结果为:
扩展资料:
在SQL中,不同的数据库拼接字段的方法不尽相同,如
MySQL: CONCAT()
Oracle: CONCAT(), ||
SQL Server: +
CONCAT() 的语法如下:
CONCAT(字串1, 字串2, 字串3, ...): 将字串1、字串2、字串3,等字串连在一起。
请注意,Oracle的CONCAT()只允许两个参数;
换言之,一次只能将两个字串串连起来。不过,在Oracle中,我们可以用'||'来一次串连多个字串。
例子1:
MySQL/Oracle:
SELECT CONCAT(region_name,"-",store_name) name FROM Geography
或
SELECT CONCAT(region_name,store_name) FROM Geography
WHERE store_name = 'Boston';
结果:
'EastBoston
参考技术C 哪种数据库?如果是SQLSERVER: SELECT CAST(COLUMN1 AS VARCHAR(10)) + '-' + CAST(COLUMN2 AS VARCHAR(10) ...) as P FROM TABLE 这么一直拼就好了。
如果是ORACLE: SELECT TO_CHAR(COLUMN1) || '-' || TO_CHAR(COLUMN1)|| '-' || TO_CHAR... AS P FROM TABLE本回答被提问者采纳 参考技术D SELECT CONVERT(VARCHAR(10),BILLID) + CONVERT(VARCHAR(10),BILLID) FROM S_BILL sb
说明,所有数字都可以,可以很多个字段连接,在SQL2000下测试过
这个最易明了,CONVERT(VARCHAR(10),BILLID) 转成字符,
+ 表示连接
以上是关于SQL server 两个查询结果拼接成一个,语句改怎样修改?的主要内容,如果未能解决你的问题,请参考以下文章