Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从sql中删除字符串_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

从sql中删除字符串

从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

请参见以下数据

表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          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我的要求,完全填充