Sql 查询将一列划分为多个列
我有以下情况: 在agents表中,我有两列,第一列称为AgentID,第二列称为AgentName。很少有AgentID以“A”开头,很少有AgentID以“M”开头,我想做的是:Sql 查询将一列划分为多个列,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有以下情况: 在agents表中,我有两列,第一列称为AgentID,第二列称为AgentName。很少有AgentID以“A”开头,很少有AgentID以“M”开头,我想做的是: AgentID AgentName A123 Name1 M123 Name2 A234 Name3 Aagents AAgentName Magents MAgentName A123 Name1 M123 Name2 A234 Name3 NULL
AgentID AgentName
A123 Name1
M123 Name2
A234 Name3
Aagents AAgentName Magents MAgentName
A123 Name1 M123 Name2
A234 Name3 NULL NULL
这可能吗?我知道这很奇怪,但我的老板希望这样 试试这个
select * from (select AgentID as Aagents, AgentName as AagentName from table where
AgentID like 'A%'), (select AgentID as MAgents, AgentName as MAgentName from
table where AgentID like 'M%')
大概是这样的:
select
case when AgentName like 'A%' then name end as Aagents,
case when AgentName like 'M%' then Name end as Magents
from tblName
您可以在两个子查询(一个用于a代理,一个用于M代理)和
ROW\u NUMBER()
上的联接之间进行完全外部联接,以使一侧具有空值(记录较少的一侧):
试试这个
WITH AAgents AS
(
SELECT ROW_NUMBER() over (order by AgentID) AS RN,
AgentID AS Aagents,
AgentName As AAgentName
FROM Agents
WHERE LEFT(AgentID,1)='A'
),
MAgents As
(
SELECT ROW_NUMBER() over (order by AgentID) AS RN,
AgentID AS Magents,
AgentName As MAgentName
FROM Agents
WHERE LEFT(AgentID,1)='M'
)
SELECT
Aagents,
AAgentName,
Magents,
MAgentName
FROM AAgents
FULL OUTER JOIN MAgents
ON AAgents.RN=MAgents.RN
您的答案与我的答案非常相似,但您使用了CTE而不是子查询。出于好奇:在这种情况下使用CTE有什么好处?
WITH AAgents AS
(
SELECT ROW_NUMBER() over (order by AgentID) AS RN,
AgentID AS Aagents,
AgentName As AAgentName
FROM Agents
WHERE LEFT(AgentID,1)='A'
),
MAgents As
(
SELECT ROW_NUMBER() over (order by AgentID) AS RN,
AgentID AS Magents,
AgentName As MAgentName
FROM Agents
WHERE LEFT(AgentID,1)='M'
)
SELECT
Aagents,
AAgentName,
Magents,
MAgentName
FROM AAgents
FULL OUTER JOIN MAgents
ON AAgents.RN=MAgents.RN