[英]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.