PDA

View Full Version : سوال: چگونگی نوشتن یک دستور SQL



rezaei
دوشنبه 01 آذر 1389, 15:48 عصر
با سلام

جدولی را با فیلدهای partcode,inventory,type در نظر بگیرید که رکوردها در ان می تواند تکراری باشد
حال میخواهم جدولی را استخراج کنم با فیلد های partcode,inventory1,inventory2
که در ان inventory1 جمع ستون inventory با شرط type=1و
inventory2 جمع ستون inventory با شرط type=2
دستور sql ان چگونه می تواند باشد
با تشکر

amir65gh
دوشنبه 01 آذر 1389, 18:23 عصر
سلام دوست عزیز
بصورت زیر میتونید عمل کنید

...,select partcode , (select sum(inventory) from tbl_X where type = 1)as inventory1
from tbl_X
موفق باشید.

rezaei
سه شنبه 02 آذر 1389, 08:21 صبح
با سلام وتشکر از توجه شما
امتحان کردم دو تا مشکل وجود دارد
اول فقط یک جمله را می پذیرد
select partcode , (select sum(inventory) from tbl_X where type = 1)as inventory1
دوم عملا جمع نمی دهد یعنی دو رکورد با یک partcode وجود دارد

Reza_Yarahmadi
سه شنبه 02 آذر 1389, 11:05 صبح
ميتونيد به صورت زير عمل كنيد
Select
partcode,
inventory1 = (
Select
inventory + ','
From
TableName t2
Where
type = 2
AND
t.partcode = t2.partcode
for XML Path(''))

,inventory2 = (
Select
inventory + ','
From
TableName t2
Where
type = 3
AND
t.partcode = t2.partcode
for XML Path(''))
From
TableName t
group by
partcode

rezaei
شنبه 06 آذر 1389, 08:08 صبح
با سلام وتشکر
با جمله زیر جواب داد
SELECT partcode,
(SELECT SUM(inputqty)
FROM kard t1
WHERE doc_type = 10 AND t.partcode = t1.partcode
GROUP BY partcode) AS inventory1,
(SELECT SUM(inputqty)
FROM kard t1
WHERE doc_type > 10 AND t.partcode = t1.partcode
GROUP BY partcode) AS inventory2
FROM kard t
GROUP BY partcode



با تشکر مجدد از شما

Reza_Yarahmadi
شنبه 06 آذر 1389, 08:25 صبح
متاسفانه جواب نداد
نميدونم شما چطور عمل كرديد.
من روي جدول زير و داده هاي نمونه اي تست كردم بدون مشكل جواب داد. اگه خطايي ميده خطا رو اينجا بذاريد تا بشه مشكلتون رو حل كرد.
CREATE TABLE [dbo].[tbl](
[partcode] [int] NULL,
[inventory] [nvarchar](500) COLLATE Arabic_CI_AS NULL,
[type] [int] NULL
) ON [PRIMARY]




Insert Into tbl Values (1, 'داده 1', 1)
Insert Into tbl Values (1, 'داده 2', 1)
Insert Into tbl Values (1, 'داده 3', 2)
Insert Into tbl Values (1, 'داده 4', 2)
Insert Into tbl Values (1, 'داده 5', 2)

Insert Into tbl Values (2, 'ديتا 1', 1)
Insert Into tbl Values (2, 'ديتا 2', 1)
Insert Into tbl Values (2, 'ديتا 3', 1)
Insert Into tbl Values (2, 'ديتا 4', 1)
Insert Into tbl Values (2, 'ديتا 5', 2)
Insert Into tbl Values (2, 'ديتا 6', 2)
Insert Into tbl Values (2, 'ديتا 7', 2)



Select
partcode,
inventory1 = (
Select
inventory + ','
From
tbl t2
Where
type = 1
AND
t.partcode = t2.partcode
for XML Path(''))

,inventory2 = (
Select
inventory + ','
From
tbl t2
Where
type = 2
AND
t.partcode = t2.partcode
for XML Path(''))
From
tbl t
group by
partcode



البته من با كلمه جمع شما مشكل دارم يعني چي جمع كنه؟ اگه منظورتون اينه كه فيلد inventory عدد است و ميخوايد جمع عددها رو بدست بياريد ميتونيد بصورت زير عمل كنيد.
Select
partcode,
inventory1 = (
Select
Sum(inventory)
From
tbl t2
Where
type = 1
AND
t.partcode = t2.partcode)

,inventory2 = (
Select
Sum(inventory)
From
tbl t2
Where
type = 2
AND
t.partcode = t2.partcode)
From
tbl t
group by
partcode