需要查询下表

时间:2011-10-12 04:35:32

标签: sql sql-server-2005

我有一个名为loc的表有属性locid,sid,role,link,href。           我需要提取所有这些超链接id 1,2,3,4,5,6,7,8,9            但是3有两个位置3& 4.我需要从3和4中提取内容。但我的sid不应重复

             Locid         Sid
            1                   1
            2             2
            3             3
            4             3
            5             4
            6             7
            7             7
            8             7
            9             8
           10             8
           11             4
           12             4
           13             9
           14             4

我的出局应该采用这种形式

            Sid     locid
            1        1
            2        2
            3        3
                     4

            4        5
                     11
                     12 
                     14

            7         6
                      7
                      8

            8         9
                      10

            9         13

3 个答案:

答案 0 :(得分:1)

select
    sid = case when rn1 = 1 then sid end,
    locid
from
(
    select 
        sid, 
        locid, 
        rn1 = row_number() over(partition by sid order by locid),
        rn2 = row_number() over(order by sid, locid)
    from tablename
) t
order by rn2

答案 1 :(得分:0)

那么你的结果不是一个干净的二维表,所以你必须将locid卷成一个值。 MySql提供GROUP_CONCAT函数:

我没有测试过这个,但是有点像:

SELECT sid, GROUP_CONCAT( locid SEPARATOR ', ') FROM mytable GROUP BY sid

这将导致:

1    1, 
2    2,
3    3, 4
4    5, 11, 12, 14

答案 2 :(得分:0)

我不明白你是想保留空格还是删除sid值重复的地方。 这应该只为您提供唯一sid值的行

 SELECT sid, locid FROM mytable GROUP BY sid;

如果您有大量数据,您可以选择并插入另一个表或文本文件

 CREATE TABLE temp LIKE mytable;
 INSERT INTO temp
 SELECT sid, locid FROM mytable GROUP BY sid;
 DROP mytable;
 ALTER TABLE temp RENAME mytable;

或在文本文件中输出的那个:

 SELECT sid, locid FROM mytable GROUP BY sid
 INTO OUTFILE 'C:/myfolder/mytextfile.txt'; 

尝试更新你的帖子:)