Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE TABLE #T (ID INT , ProductId INT, MemberId INT, SessionId VARCHAR(100), CreatedOn DATETIME, Quantity INT)
- INSERT INTO #T SELECT 62,1 ,2 ,' ','2012-09-11',1
- INSERT INTO #T SELECT 63, 2,2, ' ','2012-09-11',1
- INSERT INTO #T SELECT 64, 1,0,'agzdeoqubwokfme05wwmne55','2012-09-11',1
- INSERT INTO #T SELECT 65, 3,0,'agzdeoqubwokfme05wwmne55','2012-09-11',1
- ;With CTE AS
- (SELECT
- ID
- ,ProductId
- ,MemberId = MAX(MemberId) OVER(PARTITION BY ProductID ORDER bY(SELECT 1))
- ,SessionID
- ,CreatedOn = CONVERT(VARCHAR(10),MAX(CreatedOn) OVER(PARTITION BY ProductID ORDER bY(SELECT 1)),20)
- ,Quantity = SUM(Quantity) OVER(PARTITION BY ProductID ORDER bY(SELECT 1))
- ,Rn = ROW_NUMBER() OVER(PARTITION BY ProductID ORDER bY(SELECT 1))
- FROM #T)
- SELECT ID,ProductId,MemberId,SessionID,CreatedOn,Quantity FROM CTE WHERE Rn = 1
- DROP TABLE #T
- CREATE TABLE #T (ID INT , ProductId INT, MemberId INT, SessionId VARCHAR(100), CreatedOn DATETIME, Quantity INT)
- INSERT INTO #T SELECT 62,1 ,2 ,' ','2012-09-11',1
- INSERT INTO #T SELECT 63, 2,2, ' ','2012-09-11',1
- INSERT INTO #T SELECT 64, 1,0,'agzdeoqubwokfme05wwmne55','2012-09-11',1
- INSERT INTO #T SELECT 65, 3,0,'agzdeoqubwokfme05wwmne55','2012-09-11',1
- ;With CTE AS
- (SELECT
- ID
- ,ProductId
- ,MemberId = MAX(MemberId) OVER(PARTITION BY ProductID ORDER bY(SELECT 1))
- ,SessionID
- ,CreatedOn = CONVERT(VARCHAR(10),MAX(CreatedOn) OVER(PARTITION BY ProductID ORDER bY(SELECT 1)),20)
- ,Quantity = SUM(Quantity) OVER(PARTITION BY ProductID ORDER bY(SELECT 1))
- ,Rn = ROW_NUMBER() OVER(PARTITION BY ProductID ORDER bY(SELECT 1))
- FROM #T)
- SELECT ID,ProductId,MemberId,SessionID,CreatedOn,Quantity FROM CTE WHERE Rn = 1
- DROP TABLE #T
- CREATE TABLE #T (ID INT , ProductId INT, MemberId INT, SessionId VARCHAR(100), CreatedOn DATETIME, Quantity INT)
- INSERT INTO #T SELECT 62,1 ,2 ,' ','2012-09-11',1
- INSERT INTO #T SELECT 63, 2,2, ' ','2012-09-11',1
- INSERT INTO #T SELECT 64, 1,0,'agzdeoqubwokfme05wwmne55','2012-09-11',1
- INSERT INTO #T SELECT 65, 3,0,'agzdeoqubwokfme05wwmne55','2012-09-11',1
- ;With CTE AS
- (SELECT
- ID
- ,ProductId
- ,MemberId = MAX(MemberId) OVER(PARTITION BY ProductID ORDER bY(SELECT 1))
- ,SessionID
- ,CreatedOn = CONVERT(VARCHAR(10),MAX(CreatedOn) OVER(PARTITION BY ProductID ORDER bY(SELECT 1)),20)
- ,Quantity = SUM(Quantity) OVER(PARTITION BY ProductID ORDER bY(SELECT 1))
- ,Rn = ROW_NUMBER() OVER(PARTITION BY ProductID ORDER bY(SELECT 1))
- FROM #T)
- SELECT ID,ProductId,MemberId,SessionID,CreatedOn,Quantity FROM CTE WHERE Rn = 1
- DROP TABLE #T
- ID ProductId MemberId SessionID CreatedOn Quantity
- 62 1 2 2012-09-11 2
- 63 2 2 2012-09-11 1
- 65 3 0 agzdeoqubwokfme05wwmne55 2012-09-11 1
- UPDATE #T
- SET
- #T.ID = c.ID
- ,#T.ProductId =c.ProductId
- ,#T.MemberId = c.MemberId
- ,#T.SessionID = c.SessionID
- ,#T.CreatedOn = c.CreatedOn
- ,#T.Quantity = c.Quantity
- FROM #T
- INNER JOIN CTE c
- ON #T.ID = c.ID
- WHERE c.Rn = 1
- ID ProductId MemberId SessionId CreatedOn Quantity
- 62 1 2 2012-09-11 2
- 63 2 2 2012-09-11 1
- 64 1 0 agzdeoqubwokfme05wwmne5 2012-09-11 1
- 65 3 0 agzdeoqubwokfme05wwmne55 2012-09-11 1
- ;With CTE AS
- (SELECT
- ID
- ,ProductId
- ,MemberId = MAX(MemberId) OVER(PARTITION BY ProductID ORDER bY(SELECT 1))
- ,SessionID
- ,CreatedOn = CONVERT(VARCHAR(10),MAX(CreatedOn) OVER(PARTITION BY ProductID ORDER bY(SELECT 1)),20)
- ,Quantity = SUM(Quantity) OVER(PARTITION BY ProductID ORDER bY(SELECT 1))
- ,Rn = ROW_NUMBER() OVER(PARTITION BY ProductID ORDER bY(SELECT 1))
- FROM #T)
- UPDATE #T
- SET
- #T.ID = c.ID
- ,#T.ProductId =c.ProductId
- ,#T.MemberId = c.MemberId
- ,#T.SessionID = c.SessionID
- ,#T.CreatedOn = CONVERT(VARCHAR(10),c.CreatedOn,20)
- ,#T.Quantity = c.Quantity
- FROM #T
- INNER JOIN CTE c
- ON #T.ID = c.ID
- WHERE c.Rn = 1
- SELECT * FROM #T
- DROP TABLE #T
- UPDATE #T
- SET
- #T.ID = c.ID
- ,#T.ProductId =c.ProductId
- ,#T.MemberId = c.MemberId
- ,#T.SessionID = c.SessionID
- ,#T.CreatedOn = c.CreatedOn
- ,#T.Quantity = c.Quantity
- FROM #T
- INNER JOIN (SELECT t.ID,t.ProductID,t.MemberId,t.SessionId,t.CreatedOn,x.Quantity
- FROM #T t
- JOIN (
- SELECT
- ID = MIN(ID)
- ,ProductID
- ,MemberId = MAX(MemberId)
- ,CreatedOn = MAX(CreatedOn)
- ,Quantity = SUM(Quantity)
- FROM #T
- GROUP BY ProductID
- )X
- ON t.ID =X.ID) c
- ON #T.ID = c.ID
- SELECT * FROM #T
- DROP TABLE #T
- SELECT ProductID,
- max(MemberId),
- max(CreatedOn),
- sum(Quantity)
- FROM theTable
- WHERE SessionID=<id> or MemberID=<id>
- GROUP BY ProductID
- DECLARE @Temp1 TABLE
- (
- --datafields same AS your table
- )
- DECLARE @Temp2 TABLE
- (
- --datafields same AS your table
- )
- INSERT INTO @Temp1
- SELECT ID,
- ProductID,
- MemberId,
- SessionId,
- CreatedOn,
- Quantity
- FROM theTable
- WHERE SessionID= @SessionID or MemberID= @MemberID
- UPDATE a
- SET SessionID = @SessionID , MemberID= @MemberID
- FROM @Temp1 AS a
- --WHERE SessionID= @SessionID OR MemberID= @MemberID
- INSERT INTO @Temp2
- SELECT MAX(ID),
- ProductID,
- max(MemberId),
- MAX(SessionId),
- max(CreatedOn),
- sum(Quantity)
- FROM @Temp1
- GROUP BY ProductID
- UPDATE a
- SET a.MemberId = b.MemberId ,a.SessionId=b.SessionId ,a.CreatedOn=b.CreatedOn,a.Quantity=b.Quantity
- FROM YourTable AS a
- INNER JOIN @Temp2 AS b
- ON a.ID=b.ID
- DELETE FROM YourTable
- WHERE ID IN ( SELECT ID
- FROM @Temp1 AS ta
- WHERE NOT EXISTS ( SELECT 1
- FROM @Temp2 AS tb
- WHERE ta.ID = tb.ID ) )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement