Sql 选择不同条件下的每列值
我有一个SQL查询,如下所示:Sql 选择不同条件下的每列值,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我有一个SQL查询,如下所示: SELECT urban_appr, urban_in, rural_appr, rural_in, ground_appr, ground_in FROM <table> 选择城市进站、城市进站、农村进站、农村进站、地面进站、地面进站 从…起 在上面的查询中,我必须添加WHERE子句,如下所示: 对于城市值,其中方案类型='U' 对于农村值,其中scheme\u type='R' 对于基本值,其中scheme\u type='E' 我希望所
SELECT urban_appr, urban_in, rural_appr, rural_in, ground_appr, ground_in
FROM <table>
选择城市进站、城市进站、农村进站、农村进站、地面进站、地面进站
从…起
在上面的查询中,我必须添加WHERE子句,如下所示:
- 对于城市值,
其中方案类型='U'
- 对于农村值,
其中scheme\u type='R'
- 对于基本值,
其中scheme\u type='E'
嗯,这看起来很难看-但是试试这个
SELECT ISNULL(district_nm,nm) district_nm,
URBAN_APPR,
URBAN_IN,
RURAL_APPR,
RURAL_IN,
ground_appr,
ground_in
FROM
(SELECT ISNULL(a.district_nm, b.district_nm) nm,
urban_appr,
urban_in,
rural_appr,
rural_in
FROM
(SELECT DISTRICT_NM,
URBAN_APPR,
URBAN_IN
FROM TABLE_NAME
WHERE SCHEME_TYPE = 'U'
) a
FULL OUTER JOIN (
(SELECT DISTRICT_NM,
RURAL_APPR,
RURAL_IN
FROM TABLE_NAME
WHERE SCHEME_TYPE = 'R'
)B)
ON a.district_nm = b.district_nm
) temp
FULL OUTER JOIN (
(SELECT DISTRICT_NM,
GROUND_APPR,
GROUND_IN
FROM TABLE_NAME
WHERE SCHEME_TYPE = 'E'
)c)
ON temp.nm = c.district_nm;
嗯,这看起来很难看-但是试试这个
SELECT ISNULL(district_nm,nm) district_nm,
URBAN_APPR,
URBAN_IN,
RURAL_APPR,
RURAL_IN,
ground_appr,
ground_in
FROM
(SELECT ISNULL(a.district_nm, b.district_nm) nm,
urban_appr,
urban_in,
rural_appr,
rural_in
FROM
(SELECT DISTRICT_NM,
URBAN_APPR,
URBAN_IN
FROM TABLE_NAME
WHERE SCHEME_TYPE = 'U'
) a
FULL OUTER JOIN (
(SELECT DISTRICT_NM,
RURAL_APPR,
RURAL_IN
FROM TABLE_NAME
WHERE SCHEME_TYPE = 'R'
)B)
ON a.district_nm = b.district_nm
) temp
FULL OUTER JOIN (
(SELECT DISTRICT_NM,
GROUND_APPR,
GROUND_IN
FROM TABLE_NAME
WHERE SCHEME_TYPE = 'E'
)c)
ON temp.nm = c.district_nm;
您是否正在尝试这样做-根据值的类型选择不同的列
SELECT urban_appr, urban_in, NULL, NULL, NULL, NULL
FROM dbo.YourTable WHERE scheme_type = 'U'
UNION
SELECT NULL, NULL, rural_appr, rural_in, NULL, NULL
FROM dbo.YourTable WHERE scheme_type = 'R'
UNION
SELECT NULL, NULL, NULL, NULL, ground_appr, ground_in
FROM dbo.YourTable WHERE scheme_type = 'E'
更新:因此您希望添加另一列并按其分组:
SELECT district_nm, urban_appr, urban_in, NULL, NULL, NULL, NULL
FROM dbo.YourTable WHERE scheme_type = 'U'
UNION
SELECT district_nm, NULL, NULL, rural_appr, rural_in, NULL, NULL
FROM dbo.YourTable WHERE scheme_type = 'R'
UNION
SELECT district_nm, NULL, NULL, NULL, NULL, ground_appr, ground_in
FROM dbo.YourTable WHERE scheme_type = 'E'
GROUP BY district_nm
这就是你要找的吗???你是想做这样的事情吗?根据你的值的类型选择不同的列
SELECT urban_appr, urban_in, NULL, NULL, NULL, NULL
FROM dbo.YourTable WHERE scheme_type = 'U'
UNION
SELECT NULL, NULL, rural_appr, rural_in, NULL, NULL
FROM dbo.YourTable WHERE scheme_type = 'R'
UNION
SELECT NULL, NULL, NULL, NULL, ground_appr, ground_in
FROM dbo.YourTable WHERE scheme_type = 'E'
更新:因此您希望添加另一列并按其分组:
SELECT district_nm, urban_appr, urban_in, NULL, NULL, NULL, NULL
FROM dbo.YourTable WHERE scheme_type = 'U'
UNION
SELECT district_nm, NULL, NULL, rural_appr, rural_in, NULL, NULL
FROM dbo.YourTable WHERE scheme_type = 'R'
UNION
SELECT district_nm, NULL, NULL, NULL, NULL, ground_appr, ground_in
FROM dbo.YourTable WHERE scheme_type = 'E'
GROUP BY district_nm
这就是您要查找的内容吗???使用
JOIN
将每个地区的所有行合并为一行:
select
district_nm,
t1.urban_appr, t1.urban_in,
t2.rural_appr, t2.rural_in,
t3.ground_appr, t3.ground_in
from <table> t1
join <table> t2 on t2.district_nm = t1.district_nm and t2.scheme_type = 'R'
join <table> t3 on t3.district_nm = t1.district_nm and t3.scheme_type = 'E'
where t1.scheme_type = 'U';
使用JOIN
将每个district\u nm
的所有行合并为一行:
select
district_nm,
t1.urban_appr, t1.urban_in,
t2.rural_appr, t2.rural_in,
t3.ground_appr, t3.ground_in
from <table> t1
join <table> t2 on t2.district_nm = t1.district_nm and t2.scheme_type = 'R'
join <table> t3 on t3.district_nm = t1.district_nm and t3.scheme_type = 'E'
where t1.scheme_type = 'U';
不,它工作不正常。它显示所有类别中的一组公用行。不,它工作不正常。它显示了所有类别中的一组通用行。好的,我需要再添加一列(district_nm),这将是第一列,我想在此列上分组。是的,它可以工作,但问题是,如果任何地区在所有类别(即U、R和e)中都有REOCRD,则不在一行中显示该地区的记录,它显示为三行。@RPK:您需要向我们展示一些示例数据,并更详细地解释您真正想要的是什么……好的,我需要再添加一列(district_nm),这将是第一列,我想在此列上分组。是的,它可以工作,但问题是,如果任何district在所有类别中都有REOCRD,即U、R和e,然后,它将显示三行,而不是一行显示该地区的记录。@RPK:您需要向我们显示一些示例数据,并更详细地解释您真正想要的是什么……您好,重复组先生。阅读并将您的表格拆分为two@Bohemian这是不可能的。我必须查询其他人设计的现有数据库。scheme\u type
对于该district\u nm='BR'
行的值是多少??原始数据中有两行吗??一个用于district\u nm='BR'和scheme\u type='R'
,另一个用于district\u nm='BR'和scheme\u type='E'
,或者这是如何工作的?不,我有一行。前两列是“U”,后两列是“R”,后两列是“E”。您好,重复组。阅读并将您的表格拆分为two@Bohemian这是不可能的。我必须查询其他人设计的现有数据库。scheme\u type
对于该district\u nm='BR'
行的值是多少??原始数据中有两行吗??一个用于district\u nm='BR'和scheme\u type='R'
,另一个用于district\u nm='BR'和scheme\u type='E'
,或者这是如何工作的?不,我有一行。前两列为“U”,后两列为“R”,后两列为“E”。