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表查询没有结果,为什么拼接后结果都是空?

参考技术A 你这是两表连接查询,但是你没有写连接条件,会产生笛卡尔积,所以结果也就是b表1条数据×c表0条数据=0条数据,想要有数据建议使用b表left join c表 on连接条件追问

这两个表没有关联的字段,怎样写条件?

追答

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 是可替换所有空结果的非空值。

参考资料:

百度百科.计算列



参考技术A

通过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指定的列进行分组。

参考技术B

SQL中字符型字段的拼接可以使用“+”或者“||”来实现,不过考虑到你问题中这几个字段属于整形字段,需要先将整形进行数据类型转换后,再使用“+”或者“||”拼接。

拼接的语法为:

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 两个查询结果拼接成一个,语句改怎样修改?的主要内容,如果未能解决你的问题,请参考以下文章

hibernate的hql把一列的结果集拼接成一个字符串

将两条sql的查询结果拼接在一起显示

Oracle查询出两个字段连接成一个字段..中间有符号隔开

1、sql查询语句时怎么把几个字段拼接成一个字段?这几个字段是整型的。

MySQL的sql语句如何将一列数据拼接成一个字符串?

SQL Server常用查询