PDA

View Full Version : یه مشکل کوچیک با join



mohsenaria
یک شنبه 29 شهریور 1388, 01:35 صبح
سلام من یه Table به نام T دارم که یکی از فیلد های اون Faz هست این فیلد یامقدارش تک فاز هست یا سه فاز حالا من می خوام یه کوئری بگیرم که تعداد تک فازام تو یه ستون و تعداد سه فازام تو یه ستون دیگه نمایش داده بشه یکی از دوستان Left Join رو بهم پیشنهاد داد ولی نتیجه ای نگرفتم:عصبانی++: به نظرتون باید چیکار کنم؟ مرسی.:قلب:
اینم کوئری خودم.


(SELECT COUNT(faz) AS cnt1,1 as R1
FROM T
WHERE (faz = N'تک فاز'))

left join (select count(faz) as cnt2,2 as R2
from T
WHERE (faz=N'سه فاز')) on R1=R2

محمد سلیم آبادی
یک شنبه 29 شهریور 1388, 01:46 صبح
declare @t table
(faz nvarchar(10))
insert @t values(N'تک فاز')
insert @t values(N'تک فاز')
insert @t values(N'سه فاز')
insert @t values(N'سه فاز')
insert @t values(N'سه فاز')

SELECT SUM(CASE WHEN faz=(N'تک فاز') THEN 1 ELSE 0 END) AS s1,
SUM(CASE WHEN faz=(N'سه فاز') THEN 1 ELSE 0 END) AS s2
FROM @t

SELECT D1.c1, D2.c2 FROM
(
SELECT [c1]=COUNT(*), [a]=1
FROM @t
WHERE faz=N'تک فاز'
)D1
INNER JOIN
(
SELECT [c2]=COUNT(*), [a]=1
FROM @t
WHERE faz=N'سه فاز'
)D2 ON D1.a=D2.a

mohsenaria
یک شنبه 29 شهریور 1388, 12:59 عصر
تو ویژوال استودیو اینو اجرا کردم این ارور رو داد:
SQL Execution Error.

Executed SQL statement: DECLARE @t TABALE(faz nvarchar(10)) INSERT @t VALUES (N'تک فاز')INSERT @t

VALUES (N'تک فاز')INSERT @t
VALUES (N'سه فاز')INSERT @t
VALUES (N...
Error Source: .Net SqlClient Data Provider
Error Message: Incorrect syntax near 'INSERT@t'.

در ضمن من دارم با dotnetcharting کار می کنم و می خام درصد های سه فاز و تک فاز رو به صورت نمودار نشون بدم حالا اگه راه حل دیگه ای دارید پیشنهاد بدید.مرسی.

محمد سلیم آبادی
یک شنبه 29 شهریور 1388, 14:04 عصر
این کدهایی را که فرستادم در SQL Server 2008 ENGIN نوشتم و اجرا کردم و سپس پست کردم!
راه حلی دیگری را برای پیشنهاد متاسفانه ندارم.

mohsenaria
یک شنبه 29 شهریور 1388, 19:59 عصر
بالاخره درستش کردم بازم مرسی از Msalim جان

SELECT ds1.cnt1, ds2.cnt2
FROM (SELECT COUNT(faz) AS cnt1, 1 AS R1
FROM T
WHERE (faz = N'تک فاز')) AS ds1 LEFT OUTER JOIN
(SELECT COUNT(faz) AS cnt2, 1 AS R2
FROM T AS T_1
WHERE (faz = N'سه فاز')) AS ds2 ON ds1.R1 = ds2.R2