Sql数据库查询,如何实现只显示为某值的字段?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sql数据库查询,如何实现只显示为某值的字段?相关的知识,希望对你有一定的参考价值。
例如字段A='yes',B='yes',C='no'
希望查询结果只显示字段A,B,不显示C。
开始以为用'or'可以,select * from table where A='yes' or B='yes' or C='yes'
但这样只要A,B,C中有一个是yes,就会显示全部
还有其他办法吗?
以下是以sql server为例来说明:
select b.stu_name,
max(case a.subject when \'语文\' then a.grade else \'\' end) as 语文,
max(case a.subject when \'数学\' then a.grade else \'\' end) as 数学,
max(case a.subject when \'英语\' then a.grade else \'\' end) as 英语
from stu_grade a,stu_master b
where a.stu_no=b.stu_no
group by b.stu_name
数据库为oralce的话执行
select b.stu_name,
max(case a.subject when \'语文\' then to_char(a.grade) else \'\' end) as 语文,
max(case a.subject when \'数学\' then to_char(a.grade) else \'\' end) as 数学,
max(case a.subject when \'英语\' then to_char(a.grade) else \'\' end) as 英语
from stu_grade a,stu_master b
where a.stu_no=b.stu_no
group by b.stu_name 参考技术A 你这个表应该是个横式,所以应该先转换成直式
我给你举个例子吧
先建立一个表
CREATE TABLE YesNo
(Column1 char(10),
Column2 char(10),
Column3 char(10),)
GO
/*插入数据*/
INSERT YesNo
VALUES('Yes','Yes','No')
/*你应该说的就是这个意思吧*/
然后执行下列语句将横式转化成直式
SELECT *
FROM YesNo
UNPIVOT (YesNo FOR 列 IN (Column1,Column2,Column3))AS My_unpivot
这样就很清晰的看出自己的哪个列是YES 哪个列是NO
然后在执行
SELECT 列
FROM YesNo
UNPIVOT (YesNo FOR 列 IN (Column1,Column2,Column3))AS My_unpivot
WHERE YesNo = 'Yes'
就可以查到了 你可以自己执行以下 自己理解以下
PS:我要出门了 下午才能回来 不懂的可以问 参考技术B 首先,要确认该字段是否允许为空,如果不允许则无法插入。
如果该字段允许为空则可参考以下方法插入:
比如数据表table的字段有:name,email,addr。其中addr可以为空,并插入空值。sql语句如下:
insert into table(name,email) values('xiaoming','my email') 参考技术C 用case when 先来判断出谁是YES or NO 的字段 给别名 再通过子查询来获取你要的数据显示出来。 参考技术D 问题不可实现吧;
如查询字段
A='yes',B='yes',C='no' 为 A,B
A='yes',B='no',C='no' 为 A
A='yes',B='yes',C='yes' 为 A,B,C
要显示字段列数明显不同(一个查询应该不可实现)
剑指offer:面试题25二叉树中和为某值的路径
题目描述
输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
代码示例
import java.util.ArrayList;
import java.util.List;
public class Offer25 {
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(1);
Offer25 testObj = new Offer25();
List<List<Integer>> ret = testObj.findPath(root, 4);
for (List<Integer> list: ret) {
System.out.println(list);
}
}
static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
private List<List<Integer>> ret = new ArrayList<>();
public List<List<Integer>> findPath(TreeNode root, int target) {
backtracking(root, target, new ArrayList<>());
return ret;
}
private void backtracking(TreeNode node, int target, List<Integer> path) {
if (node == null)
return;
path.add(node.val);
target -= node.val;
if (target == 0 && node.left == null && node.right == null) {
ret.add(new ArrayList<>(path));
} else {
backtracking(node.left, target, path);
backtracking(node.right, target, path);
}
path.remove(path.size() - 1);
}
}
以上是关于Sql数据库查询,如何实现只显示为某值的字段?的主要内容,如果未能解决你的问题,请参考以下文章