从sql中删除字符串
请参见以下数据 表A从sql中删除字符串,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,请参见以下数据 表A AID NAME 1 A 2 B 3 C 4 D 5 E 6 F 表B BID AID NAME 1 1 T1 2 1 T2 3 2 T3 4 2 T4 5 3
AID NAME
1 A
2 B
3 C
4 D
5 E
6 F
表B
BID AID NAME
1 1 T1
2 1 T2
3 2 T3
4 2 T4
5 3 T5
6 4 T6
7 1 T7
8 1 T8
9 2 T9
10 2 T10
11 3 T11
12 4 T12
我用的是这句话
SELECT
dbo.A.NAME AS ANAME, dbo.B.NAME AS BNAME
FROM
dbo.A
LEFT OUTER JOIN
dbo.B ON dbo.A.AID = dbo.B.AID
其结果如下:
ANAME BNAME
A T1
A T2
A T7
A T8
B T3
B T4
B T9
B T10
C T5
C T11
D T6
D T12
E NULL
F NULL
但我需要以下结果
ANAME BNAME
A T1
T2
T7
T8
B T3
T4
T9
T10
C T5
T11
D T6
T12
E NULL
F NULL
如何从上面删除额外的名称?您可以使用下面的SQL查询来获得所需的输出:
SELECT (CASE WHEN SrNo = 1
THEN ANAME
ELSE ''
END) AS ANAME
, BNAME
FROM (
SELECT ROW_NUMBER OVER (PARTITION BY dbo.A.NAME ORDER BY dbo.B.NAME) AS SrNo,
dbo.A.NAME AS ANAME, dbo.B.NAME AS BNAME
FROM dbo.A LEFT OUTER JOIN
dbo.B ON dbo.A.AID = dbo.B.AID
) AS tbl
我想,如果绝对需要在SQL中执行,可以执行以下操作,因为这是一个演示
SELECT CASE WHEN ROW_NUMBER() OVER ( PARTITION BY A.AID ORDER BY A.AID ) > 1
THEN ''
ELSE A.NAME
END AS ANAME ,
dbo.B.NAME AS BNAME
FROM dbo.A
LEFT OUTER JOIN dbo.B ON dbo.A.AID = dbo.B.AID;
试试这个
SELECT CASE WHEN ROW_NUMBER() OVER ( PARTITION BY A.NAME ORDER BY A.NAME ) = 1
THEN A.NAME
ELSE ''
END AS ANAME ,
dbo.B.NAME AS BNAME
FROM dbo.A
LEFT OUTER JOIN dbo.B ON dbo.A.AID = dbo.B.AID;
这是一个表示问题,您在SQL中什么都不做。本质上,您必须在服务器端代码中这样做,否则“ANAME”和“BNAME”之间可能没有关系。如何排序?@aツ: 排序“that”是什么意思?我看不到任何
orderby
,这意味着sql可以自由地以任何顺序传递行,并且由于列aname
为空,因此无法按aname,bname
@A对结果进行排序ツ: 根据OP提供的查询,我进行了此查询。根据问题中提供的数据,a.name
从不为空。第二件事我没有对b.name
进行排序。我没有在结尾处写orderby..
子句,因为它取决于用户希望结果的顺序。要点是OP获得了预期的输出。:)@A.ツ 我不需要分类。根据asnwer我的要求,完全填充