Database Research & Development

  • Home
  • NoSQL
    • NoSQL
    • Cassandra
  • Databases
    • Database Theory
    • Database Designing
    • SQL Server Coding Standards
    • SQL Server
    • PostgreSQL
    • MySQL
    • Greenplum
    • Linux
  • Interviews
    • SQL Server Interviews
    • MySQL Interviews
    • SQL Puzzles
  • DBA Scripts
    • SQL Server DBA Scripts
    • PostgreSQL DBA Scripts
    • MySQL DBA Scripts
    • Greenplum DBA Scripts
  • Home
  • Blog Archives !
  • (: Laugh@dbrnd :)
  • Contact Me !
sqlserverinterviews
Home 2019 July SQL Puzzle: SQL Advance Query – Generate the group of Sequences

SQL Puzzle: SQL Advance Query – Generate the group of Sequences

This article is half-done without your Comment! *** Please share your thoughts via Comment ***

Check the below input data and expected output to generate the group of sequences.

Input Data:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Name SeqNo
---- -----------
A 1
A 2
A 3
B 1
B 2
C 1
C 2
C 3
D 1
D 2
D 3
D 4
D 5

Expected Output:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Name SequenceNo_Groups
---- --------------------
A 11,12,13
A 11,12,13
A 11,12,13
B 21,22
B 21,22
C 31,32,33
C 31,32,33
C 31,32,33
D 41,42,43,44,45
D 41,42,43,44,45
D 41,42,43,44,45
D 41,42,43,44,45
D 41,42,43,44,45

Create a table with sample data:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE TABLE TestSequences
(
Name VARCHAR(3)
,SeqNo INT
)
GO
 
INSERT INTO TestSequences
VALUES
('A' ,1)
,('A' ,2)
,('A' ,3)
,('B' ,1)
,('B' ,2)
,('C' ,1)
,('C' ,2)
,('C' ,3)
,('D' ,1)
,('D' ,2)
,('D' ,3)
,('D' ,4)
,('D' ,5)
GO

Solution:

1
2
3
4
5
6
7
8
9
10
11
12
13
;WITH CTE AS
(
SELECT b.Name , CAST(rnk * 10 + SeqNo AS VARCHAR(3)) rnk FROM
(
SELECT * , ROW_NUMBER() OVER ( ORDER BY (SELECT NULL) ) rnk FROM
(
SELECT DISTINCT Name FROM TestSequences
) a
) b
INNER JOIN TestSequences a on b.Name = a.Name
)
SELECT Name, STUFF ((SELECT ',' + rnk FROM CTE w WHERE w.Name = t.Name FOR XML PATH('')) , 1,1,'') SequenceNo_Groups
FROM CTE t

Please try the different solution for this puzzle and share it via comment...

Jul 29, 2019Anvesh Patel
PostgreSQL: Create Index on Full Text Search tsvector DataSQL Server: How to compare your objects between two Databases
Comments: 11
  1. Dinesh
    August 1, 2019 at 7:27 am

    —Method-1
    ;
    WITH CTE
    As
    (Select Distinct Name From TestSequences),
    N
    As
    (Select ROw_Number()Over(Order By Name) As SLno,Name
    From CTE),
    R
    As
    (Select T.Name,(Select Convert(VarChar(500),SLNo)+Convert(Varchar(50),SeqNo)+’,’ From TestSequences TT Inner JOIn N On N.Name=TT.Name
    Where T.Name=TT.Name For XML PATH(”)) As Result
    From TestSequences T
    )
    Select Name,Left(Result,Len(Result)-1) as SequenceGroup From R

    ReplyCancel
  2. Sai Nath
    August 11, 2019 at 6:40 am

    ; WITH CTE AS
    (
    SELECT
    *,
    DENSE_RANK() OVER(ORDER BY NAME) AS DN
    FROM
    TestSequences
    )

    SELECT
    *,
    STUFF((
    SELECT
    ‘,’+CAST(B.DN AS VARCHAR(256))+CAST(B.SEQNO AS VARCHAR(256))
    FROM
    CTE AS B
    WHERE
    B.NAME = A.NAME
    FOR XML PATH(”)),1,1,”)
    FROM
    CTE AS A

    ReplyCancel
    • Brahma Teja K
      February 27, 2020 at 2:31 pm

      SELECT
      TS.NAME,
      Z.GROUPS
      FROM
      TestSequences TS
      INNER JOIN
      (
      SELECT
      S.NAME,
      STRING_AGG(CAST(Y.RN AS VARCHAR(5))+CAST(S.SeqNo AS VARCHAR(5)),’,’) AS GROUPS
      FROM
      TestSequences S
      INNER JOIN
      (
      SELECT
      X.NAME,
      ROW_NUMBER() OVER(ORDER BY X.NAME) AS RN
      FROM
      (
      SELECT DISTINCT
      NAME AS NAME
      FROM
      TestSequences
      )X
      )Y ON Y.NAME = S.Name

      GROUP BY
      S.NAME
      )Z ON Z.NAME = TS.NAME

      ReplyCancel
  3. Pavan shetty
    October 22, 2019 at 10:43 am

    ;WITH CTE
    AS
    (
    SELECT CAST(DENSE_RANK()OVER(ORDER BY NAME)AS VARCHAR(2))+CAST(SEQNO AS VARCHAR(2)) SeqNonew,*
    FROM TestSequences
    )
    SELECT Name,STUFF((SELECT ‘,’+SeqNonew FROM CTE I WHERE I.NAME=O.NAME FOR XML PATH(”) ),1,1,”) SequenceNo_Groups FROM CTE O

    ReplyCancel
  4. Samrat
    October 24, 2019 at 6:40 am

    WITH CTE
    AS
    (
    SELECT O.SEQNO+(DENSE_RANK()OVER(ORDER BY O.NAME)*10) AS VAL,NAME
    FROM TestSequences O)
    SELECT NAME,STUFF((SELECT ‘,’+CAST(VAL AS VARCHAR) FROM CTE I WHERE I.NAME = O.NAME FOR XML PATH(”)),1,1,”) AS SEQ
    FROM CTE O

    ReplyCancel
  5. koustav
    October 25, 2019 at 11:31 am

    select T1.Name,T1.total as Seq_no_group from
    (select T.name,
    array_to_string(array_agg(T.tot), ‘,’) total
    from
    (SELECT
    Name,seqno,

    Dense_RANK () OVER (
    ORDER BY Name
    ) ||”||seqno as tot
    FROM
    TestSequences)T
    group by T.name)T1,
    TestSequences t2
    where T1.Name=T2.Name

    ReplyCancel
  6. Keith Fernandes
    October 27, 2019 at 1:11 pm

    ;with cte as
    (
    select I.Name,I.SeqNo,
    dense_Rank() over (order by I.name) * 10 as rnk
    from TestSequences I
    )
    select Name,(select STRING_AGG(rnk + SeqNo,’,’) from cte O where O.Name = I.Name group by Name) as SEQ from cte I

    ReplyCancel
  7. Brahma Teja K
    February 27, 2020 at 2:27 pm

    SELECT
    TS.NAME,
    Z.GROUPS
    FROM
    TestSequences TS
    INNER JOIN
    (
    SELECT
    S.NAME,
    STRING_AGG(CAST(Y.RN AS VARCHAR(5))+CAST(S.SeqNo AS VARCHAR(5)),’,’) AS GROUPS
    FROM
    TestSequences S
    INNER JOIN
    (
    SELECT
    X.NAME,
    ROW_NUMBER() OVER(ORDER BY X.NAME) AS RN
    FROM
    (
    SELECT DISTINCT
    NAME AS NAME
    FROM
    TestSequences
    )X
    )Y ON Y.NAME = S.Name

    GROUP BY
    S.NAME
    )Z ON Z.NAME = TS.NAME

    ReplyCancel
  8. K Brahma Teja
    February 27, 2020 at 2:30 pm

    SELECT
    TS.NAME,
    Z.GROUPS
    FROM
    TestSequences TS
    INNER JOIN
    (
    SELECT
    S.NAME,
    STRING_AGG(CAST(Y.RN AS VARCHAR(5))+CAST(S.SeqNo AS VARCHAR(5)),’,’) AS GROUPS
    FROM
    TestSequences S
    INNER JOIN
    (
    SELECT
    X.NAME,
    ROW_NUMBER() OVER(ORDER BY X.NAME) AS RN
    FROM
    (
    SELECT DISTINCT
    NAME AS NAME
    FROM
    TestSequences
    )X
    )Y ON Y.NAME = S.Name

    GROUP BY
    S.NAME
    )Z ON Z.NAME = TS.NAME

    ReplyCancel
  9. Bramhateja Kompala
    February 27, 2020 at 2:39 pm

    SELECT
    TS.NAME,
    Z.GROUPS
    FROM
    TestSequences TS
    INNER JOIN
    (
    SELECT
    S.NAME,
    STRING_AGG(CAST(Y.RN AS VARCHAR(5))+CAST(S.SeqNo AS VARCHAR(5)),’,’) AS GROUPS
    FROM
    TestSequences S
    INNER JOIN
    (
    SELECT
    X.NAME,
    ROW_NUMBER() OVER(ORDER BY X.NAME) AS RN
    FROM
    (
    SELECT DISTINCT
    NAME AS NAME
    FROM
    TestSequences
    )X
    )Y ON Y.NAME = S.Name
    GROUP BY
    S.NAME
    )Z ON Z.NAME = TS.NAME

    ReplyCancel
  10. David Test
    February 27, 2020 at 2:40 pm

    nice

    ReplyCancel

Leave a Reply Cancel reply

CAPTCHA
Refresh

*

Anvesh Patel
Anvesh Patel

Database Engineer

July 29, 2019 11 Comments SQL PuzzleAnvesh Patel, database, database research and development, dbrnd, sequence, SQL Advance Query, SQL Interview, SQL Problem, SQL Programming, SQL Puzzle, SQL Query, SQL Tips and Tricks
About Me!

I'm Anvesh Patel, a Database Engineer certified by Oracle and IBM. I'm working as a Database Architect, Database Optimizer, Database Administrator, Database Developer. Providing the best articles and solutions for different problems in the best manner through my blogs is my passion. I have more than six years of experience with various RDBMS products like MSSQL Server, PostgreSQL, MySQL, Greenplum and currently learning and doing research on BIGData and NoSQL technology. -- Hyderabad, India.

About DBRND !

dbrnd

This is a personal blog (www.dbrnd.com).

Any views or opinions represented in this blog are personal and belong solely to the blog owner and do not represent those of people, institutions or organizations that the owner may or may not be associated with in professional or personal capacity, unless explicitly stated.

Feel free to challenge me, disagree with me, or tell me I’m completely nuts in the comments section of each blog entry, but I reserve the right to delete any comment for any reason whatsoever (abusive, profane, rude, or anonymous comments) - so keep it polite.

The content of this website is protected by copyright. No portion of this website may be copied or replicated in any form without the written consent of the website owner.

Recent Comments !
  • Anvesh Patel { Sure will do... } – May 27, 12:43 PM
  • Anvesh Patel { Great... } – May 27, 12:41 PM
  • Anvesh Patel { Great... } – May 27, 12:39 PM
  • Anvesh Patel { Great... } – May 27, 12:36 PM
  • Anvesh Patel { Great... } – May 27, 12:28 PM
  • Anvesh Patel { Great... } – May 27, 12:27 PM
  • Anvesh Patel { Great... } – May 27, 12:16 PM
  • Older »
Follow Me !
  • facebook
  • linkedin
  • twitter
  • youtube
  • google
  • flickr
© 2015 – 2019 All rights reserved. Database Research & Development (dbrnd.com)
Posting....