繁体   English   中英

sql查询和分组依据

[英]sql query and group by

我不确定这是否可行我不知道这是我的表:tbchecked

[id] [name] [status]

001   john     present
001   john     present
001   john     absent
001   john     absent
001   john     leave
001   john     present
001   john     present
002   ace      present
002   ace      absent
002   ace      leave

...

有可能的? 在gridview1中输出如何查询? 1-7 不在一周内,我想从 1 数到 xxx

[id] [name] [1]      [2]      [3]     [4]             [5]            [6]      [7]

001   john  present  present  absent  absent         leave          present  present
002   ace   present  absent   leave   ...

你可以试试这样的

DECLARE @TABLE TABLE
(  
ID INT,  
STATUS VARCHAR(10)
)

INSERT INTO @TABLE  
VALUES  (1, 'present'),
        (1, 'present'),
        (1, 'absent'),
        (1, 'absent'),
        (1, 'leave'),
        (1, 'present'),
        (1, 'present'),
        (2, 'present'),
        (2, 'absent'),
        (2, 'leave')


SELECT T1.ID,  
        STUFF(  
        (  
        SELECT ',' + T2.STATUS  
        FROM @TABLE T2  
        WHERE T1.ID = T2.ID  
        FOR XML PATH ('')  
        ),1,1,'')  
FROM @TABLE T1  
GROUP BY T1.ID

否则你可以使用游标来执行一个循环Declare Cursor

如果一个 ID 只有七行,那么这可能很有用。 如果 ID 是任何随机计数,那么您必须尽可能使用动态 sql 或过程。

select ID,

SUBSTRING_INDEX(status,',','1'),

SUBSTRING_INDEX(SUBSTRING_INDEX(status,',','2'),',','-1'),

SUBSTRING_INDEX(SUBSTRING_INDEX(status,',','3'),',','-1'),

SUBSTRING_INDEX(SUBSTRING_INDEX(status,',','4'),',','-1'),

SUBSTRING_INDEX(SUBSTRING_INDEX(status,',','5'),',','-1'),

SUBSTRING_INDEX(SUBSTRING_INDEX(status,',','6'),',','-1'),

SUBSTRING_INDEX(SUBSTRING_INDEX(status,',','7'),',','-1')

 from
(

SELECT  ID, group_concat(status) as status  

FROM TABLE T

GROUP BY ID

) A

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM