Monday, 10 June 2013

row_number,dense_rank,delete duplicate value in sql


select * from emp
--OUTPUTS
id name  adddress
7    m     a
8    k     l
4    j     NULL
10    h     g
2    k     n
14    NULL mm
9    h      b
DELETE t FROM
(SELECT  id ,RANK() OVER(PARTITION BY name ORDER BY id DESC) AS rank,name FROM emp) AS t
WHERE t.rank <> 1

DELETE T FROM
(SELECT Row_Number() Over(Partition BY [Name] ORDER BY [ID]) AS RowNumber,* FROM emp)T
WHERE T.RowNumber > 1

DELETE
FROM emp
WHERE ID NOT IN
(
SELECT MAX(ID)
FROM emp
GROUP BY name)


SELECT name, COUNT(*) TotalCount
FROM emp
GROUP BY name
HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC
--OUTPUTS

name totalcount
h     2
k     2
--it is use when name or address are null then display nonnull value
select id,coalesce(name,address) address from emp
--OUTPUTS
id  address
7    m
8    k
4    j
10    h
14    mm
--pivot value and sum of id here h and k is data of name but they became columm
SELECT  h AS h, k AS k
FROM
(SELECT id, name
FROM emp ) ps
PIVOT
(
SUM (id)
FOR name IN
( [h], [k])
) AS pvt
--OUTPUTS
columm name   h      k
data          10     8 
--display , between two value or more here all address data display with comma seprated

DECLARE @name VARCHAR(1000)

SELECT @name = COALESCE(@name,'') + address + ';'
FROM emp group by address


SELECT @name AS DepartmentNames
--OUTPUTS

DepartmentNames
a;g;l;mm;