1、查询的时候把某一个字段的值拼接成字符串
以下是演示数据。
第一种方式:使用自定义变量
DECLARE @Names NVARCHAR(128) SET @Names='' -- 需要先赋值为空字符串,不然结果会是 null SELECT @Names=@Names+S_Name+',' -- S_Name 类型为字符串类型,如果不能隐示转换,就需要强制转换 FROM Student SELECT @Names
这种方法有一个好处就是,拼接出来的字符串可以赋值给变量或直接插入表中指定字段,可以适用于存储过程之类的。
第二种方式:转换为 XML 格式
SELECT t.S_Name + ',' FROM ( SELECT S_Name FROM Student ) t FOR XML PATH('')
使用这种方式有一个缺点就是,不能直接赋值给变量或插入表,适用于查看时使用。
如果想要使之能够赋值给变量或插入表中,那就需要转换一下。如下:
DECLARE @Names NVARCHAR(128) SET @Names='' SELECT @Names= ( SELECT t.S_Name + ',' FROM ( SELECT S_Name FROM Student ) t FOR XML PATH(''),TYPE ).value('.','NVARCHAR(128)') SELECT @Names
2、查询一个字段同时满足多个条件的方法
举个栗子:比如现在有一些订单,而每一个订单有多个产品,现在我要查出同时具有某几个产品的订单。
再拿学生和课程来举例,一个学生可以选择多门课程,而每一门课程也可以同时被多个学生所选择,那么我现在要查出选择了某几门课程的学生。
下面是演示数据。
现在我要查出同时选择了 C# 和 SQL 课程的学生信息。如下:
SELECT s.S_Id,s.S_No,s.S_Name FROM Student s INNER JOIN Student_Course_Relation r ON s.S_Id=r.S_Id INNER JOIN Course c ON r.C_Id=c.C_Id WHERE c.C_Name='C#' OR c.C_Name='SQL' GROUP BY s.S_Id,s.S_No,s.S_Name HAVING COUNT(1) >= '2' -- 这个数字是根据 where 条件来定