Thursday, July 2, 2009

Perform paging in sql

CREATE TABLE DuplicateRcordTable (Col1 INT, Col2 INT)
INSERT INTO DuplicateRcordTable
SELECT 1, 1
UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 2
UNION ALL
SELECT 1, 2 --duplicate
UNION ALL
SELECT 1, 3
UNION ALL
SELECT 1, 4

UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 2
UNION ALL
SELECT 1, 2 --duplicate
UNION ALL
SELECT 1, 3
UNION ALL
SELECT 1, 4

UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 2
UNION ALL
SELECT 1, 2 --duplicate
UNION ALL
SELECT 1, 3
UNION ALL
SELECT 1, 4
UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 2
UNION ALL
SELECT 1, 2 --duplicate
UNION ALL
SELECT 1, 3
UNION ALL
SELECT 1, 4

UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 2
UNION ALL
SELECT 1, 2 --duplicate
UNION ALL
SELECT 1, 3
UNION ALL
SELECT 1, 4

SELECT * FROM DuplicateRcordTable


--Start to perform Paging

DECLARE @PageSize AS INT
SET @PageSize=5
Declare @StartIndex as int
SET @StartIndex=1

SET @StartIndex=((@StartIndex*@PageSize)-@PageSize) + 1
SET @PageSize=(@StartIndex + @PageSize)-1

SELECT Col1,Col2 FROM
(
SELECT *,ROW_NUMBER() over(order by col1) AS RowNumber FROM DuplicateRcordTable
) T WHERE T.RowNumber between @StartIndex and @PageSize


Result:-
Show All Records



Show records based on paging

Remove duplicate records from the table using CTE

Hello everyone,
I need to remove duplicate rows from the table and for that I made one query with CTE which will remove all duplicate rows from the table.
Here I put an example. So you can get better idea of it.

DROP TABLE DuplicateRcordTable
CREATE TABLE DuplicateRcordTable (Col1 INT, Col2 INT)
INSERT INTO DuplicateRcordTable
SELECT 1, 1
UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 2
UNION ALL
SELECT 1, 2 --duplicate
UNION ALL
SELECT 1, 3
UNION ALL
SELECT 1, 4

SELECT * FROM DuplicateRcordTable


;with DuplicateRows
AS
(
SELECT *,ROW_NUMBER() over(partition by Col1,Col2 order by Col1) DuplicateRow FROM DuplicateRcordTable
)
DELETE FROM DuplicateRows where DuplicateRow>1

SELECT * FROM DuplicateRcordTable

RESULT:-
Before deleted duplicate records:-



After deleted duplicate records

TSQL Challenge 3 to Reverse string without using Reverse() function

I have accept TSQL Challenge 3 from site and try to solve it.
Here is a URL of TSQL Challenge
http://beyondrelational.com/blogs/tc/archive/2009/05/24/tsql-challenge-3.aspx

Solved TSQL Challenge-3

DECLARE @t TABLE( ID INT IDENTITY, data VARCHAR(20))
INSERT INTO @t(data) SELECT 'Jacob'
INSERT INTO @t(data) SELECT 'Sebastian'

SET NOCOUNT ON

;WITH ReverseName AS
(
SELECT T.ID,T.data,CAST('' AS VARCHAR) AS ReverseData ,TotalLength=LEN(T.data),position=0 FROM @t T
UNION ALL
SELECT ReverseName.ID,ReverseName.data , CAST((ReverseName.ReverseData + substring(ReverseName.data,len(ReverseName.data)-position,1)) AS VARCHAR ) as ReverseData ,ReverseName.TotalLength,position=position+1 FROM ReverseName
where ReverseName.TotalLength>=position
)


SELECT ID,ReverseData AS [Reverse String] FROM ReverseName where position>TotalLength order by ID desc

OUTPUT:-