January 16, 2013 at 7:08 am
The View obtains the first three columns , i need to add one more column(totalCount) to the view that obtains the totalCount
CId CCId CCount totalCount
1 a 3 6
1 a 3 6
1 b 3 6
1 c 3 6
2 b 2 6
2 b 2 6
2 a 2 6
2 a 2 6
3 v 1 6
How to get the totalCount as 6 ?
(Business rule for Cid=1 Ccount=3
Cid=2 Ccount=2
Cid=3 Ccount=1
So the totalCount =3+2+1 =6)
January 16, 2013 at 8:54 am
How are you getting the counts? are you basing this on the CCID column for a CID?
It's better if you can give DDL like this:
CREATE TABLE mytable
( CId int
, CCId varchar(10)
, CCount int
, totalCount int
)
;
GO
INSERT MyTable
VALUES (1, 'a',3, 6)
, (1, 'a', 3, 6)
, (1, 'b', 3, 6)
, (1, 'c', 3, 6)
, (2, 'b', 2, 6)
, (2, 'b', 2, 6)
, (2, 'a', 2, 6)
, (2, 'a', 2, 6)
, (3, 'v', 1, 6)
;
go
Also, please explain the logic, don't just give some results and expect someone to interpret them to match your business rule. It saves time.
January 16, 2013 at 8:55 am
This kind of works, but I'm wondering if you've calculated something in this view already.
SELECT cid, COUNT(DISTINCT ccid)
FROM dbo.MyTable
GROUP BY cid
January 16, 2013 at 9:22 am
;WITH SampleData AS (
SELECT CId = 1, CCId = 'a', CCount = 3, totalCount = 6 UNION ALL
SELECT 1, 'a', 3, 6 UNION ALL
SELECT 1, 'b', 3, 6 UNION ALL
SELECT 1, 'c', 3, 6 UNION ALL
SELECT 2, 'b', 2, 6 UNION ALL
SELECT 2, 'b', 2, 6 UNION ALL
SELECT 2, 'a', 2, 6 UNION ALL
SELECT 2, 'a', 2, 6 UNION ALL
SELECT 3, 'v', 1, 6
)
SELECT
CId,
CCId,
CCount,
totalCount = SUM([First]) OVER (PARTITION BY (SELECT NULL))
FROM (
SELECT *,
[First] = CASE WHEN 1 = ROW_NUMBER() OVER(PARTITION BY CId ORDER BY CCId) THEN CCount END
FROM SampleData
) d
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden
January 16, 2013 at 11:08 am
As per my requirement , it would be something :
SELECT
CId,
CCId,
CCount,
(select totalCount = SUM([First]) OVER (PARTITION BY (SELECT NULL))
FROM (
SELECT *,
[First] = CASE WHEN 1 = ROW_NUMBER() OVER(PARTITION BY CId ORDER BY CCId) THEN CCount END
FROM SampleData
) d)
from SampleData
but it's giving error.
January 16, 2013 at 12:04 pm
Well the query that Chris posted returns the exact output you specified. If you need something different you have to explain it. We can't see your screen, we are not familiar with your project and we don't know the business rules.
_______________________________________________________________
Need help? Help us help you.
Read the article at http://www.sqlservercentral.com/articles/Best+Practices/61537/ for best practices on asking questions.
Need to split a string? Try Jeff Modens splitter http://www.sqlservercentral.com/articles/Tally+Table/72993/.
Cross Tabs and Pivots, Part 1 – Converting Rows to Columns - http://www.sqlservercentral.com/articles/T-SQL/63681/
Cross Tabs and Pivots, Part 2 - Dynamic Cross Tabs - http://www.sqlservercentral.com/articles/Crosstab/65048/
Understanding and Using APPLY (Part 1) - http://www.sqlservercentral.com/articles/APPLY/69953/
Understanding and Using APPLY (Part 2) - http://www.sqlservercentral.com/articles/APPLY/69954/
January 16, 2013 at 5:42 pm
ChrisM@Work (1/16/2013)
;WITH SampleData AS (
SELECT CId = 1, CCId = 'a', CCount = 3, totalCount = 6 UNION ALL
SELECT 1, 'a', 3, 6 UNION ALL
SELECT 1, 'b', 3, 6 UNION ALL
SELECT 1, 'c', 3, 6 UNION ALL
SELECT 2, 'b', 2, 6 UNION ALL
SELECT 2, 'b', 2, 6 UNION ALL
SELECT 2, 'a', 2, 6 UNION ALL
SELECT 2, 'a', 2, 6 UNION ALL
SELECT 3, 'v', 1, 6
)
SELECT
CId,
CCId,
CCount,
totalCount = SUM([First]) OVER (PARTITION BY (SELECT NULL))
FROM (
SELECT *,
[First] = CASE WHEN 1 = ROW_NUMBER() OVER(PARTITION BY CId ORDER BY CCId) THEN CCount END
FROM SampleData
) d
+1
Chris - You are a true code-talker! Are you sure you're not part Navaho?
My thought question: Have you ever been told that your query runs too fast?
My advice:
INDEXing a poor-performing query is like putting sugar on cat food. Yeah, it probably tastes better but are you sure you want to eat it?
The path of least resistance can be a slippery slope. Take care that fixing your fixes of fixes doesn't snowball and end up costing you more than fixing the root cause would have in the first place.
Need to UNPIVOT? Why not CROSS APPLY VALUES instead?[/url]
Since random numbers are too important to be left to chance, let's generate some![/url]
Learn to understand recursive CTEs by example.[/url]
[url url=http://www.sqlservercentral.com/articles/St
January 16, 2013 at 11:30 pm
The ccount is not obtain directly from table as done here.Am rather using the View written as below
With compTable(cid,ccid,ccount)
as
AS
(
select parentid,childrenId,COUNT(cmpcd) FROM
group by parentid,childrenId,cmpcd
)
select decsr,
pnumber,
(SELECT count(ccount) FROM compTable where parentid=ch.cn_id) as [Count] ,--[this is ccount]
-- here i need the total count
from table ch inner join table b
on ch.id=b.id
January 17, 2013 at 1:09 am
sabeer.mvit (1/16/2013)
The ccount is not obtain directly from table as done here.Am rather using the View written as belowWith compTable(cid,ccid,ccount)
as
AS
(
select parentid,childrenId,COUNT(cmpcd) FROM
group by parentid,childrenId,cmpcd
)
select decsr,
pnumber,
(SELECT count(ccount) FROM compTable where parentid=ch.cn_id) as [Count] ,--[this is ccount]
-- here i need the total count
from table ch inner join table b
on ch.id=b.id
Can you post the whole query referencing the view, and also the view definition, please? Some sample data would help too - exactly what will probably depend upon the view definition.
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden
January 17, 2013 at 1:11 am
dwain.c (1/16/2013)
... Are you sure you're not part Navaho?
No but one of my programming buddies went AWOL for six months last year - and resurfaced in Michigan married to an Apache!
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden
January 17, 2013 at 1:32 am
Steve Jones - SSC Editor (1/16/2013)
This kind of works, but I'm wondering if you've calculated something in this view already.
SELECT cid, COUNT(DISTINCT ccid)
FROM dbo.MyTable
GROUP BY cid
I think this should be fine ..If not please post the ddl's .I am unable to understand the problem..
this is how I tried , le me know it works for you..
CREATE TABLE #test
(
CID INT,
CCID CHAR(10),
CCOUNT INT
)
INSERT INTO #test
VALUES (2,'a',1),
(2,'b',1)
-- Edited this part
SELECT *,
(SELECT SUM(ccount) FROM(SELECT CCOUNT
FROM #test GROUP BY CID,CCOUNT)abc)CountTotal
FROM #test
~ demonfox
___________________________________________________________________
Wondering what I would do next , when I am done with this one :ermm:
Viewing 11 posts - 1 through 10 (of 10 total)
You must be logged in to reply to this topic. Login to reply