PDA

View Full Version : سوال: دستورات حرفه ای Sql



behzad_taheri20
پنج شنبه 06 تیر 1387, 00:24 صبح
سلام دوستان خسته نباشید
من یک Query می خواهم که رکوردهای یک جدول را بر حسب یک فیلدش گروه بندی کند و یکی از فیلدهای این query بصورت افقی محتوای یک فیلد جدول را که در یک گروه می باشند نشان دهد.
مثال :

field1 field2
a 12
a 2
s 33
c 44
a 4

نتیجه Query مورد درخواست :



a,(12,2,4)
s,(33)
c,(44)

behzad_taheri20
پنج شنبه 06 تیر 1387, 10:40 صبح
سلام مجدد خدمت دوستان محترم
بدجوری گیر افتادم
اگه کسی بلده ممنون میشم راهنماییم کنه
موفق باشید

behzad_taheri20
شنبه 05 مرداد 1387, 00:46 صبح
دوستان کمک کمک کمک

SYNDROME
شنبه 05 مرداد 1387, 06:40 صبح
دوست عزیز فکر نکنم با یک Query بتوانید به چنین نتیجه ای برسید.
باید از SP استفاده کنید.
اول رکوردها را در یک جدول وقت بریزید و سپس با استفاده از کرسرها می توانید فیلد دوم را به دست بیاورید.
موفق باشید

behzad_taheri20
شنبه 05 مرداد 1387, 07:39 صبح
سلام دوست عزیز ، ممنون از پاسخت
لطف می کنی کمی بیشتر توضیح دهید

ممنون

behzad_taheri20
شنبه 05 مرداد 1387, 19:23 عصر
دوستان و مدیران سایت کمک کنند بدجوری گیرم

SYNDROME
شنبه 05 مرداد 1387, 19:38 عصر
سلام دوست عزیز ، ممنون از پاسخت
لطف می کنی کمی بیشتر توضیح دهید

ممنون
در اول کار رکوردها را Group By کنید و داخل یک جدول اضافه کنید.
سپس بر روی جدول موقت یک کرسر ایجاد کنید و سپس به هر کورد که رسیدید(مثلاً a) مقدار a را به یک Function پاس کنید و در آنجا بر روی جدول اصلی یک select بزنید تا همه رکوردهای a را برگرداند و سپس با ایجاد یک کرسر مقادیر آن را به صورت رشته "1,2,3" در بیاورید و در جدول موقت ذخیره کنید.
موفق باشید

behzad_taheri20
شنبه 05 مرداد 1387, 23:18 عصر
سلام مجدد خدمت SYNDROME (http://barnamenevis.org/forum/member.php?u=35868) عزیز
من قسمتی از کد را نوشتم ولی نمی تونم Temp Query جهت ریختن مقادیر درست کنم
لطف کن راهنمایی کن
ممنون


CREATE PROCEDURE MySP AS
Declare @F1 nvarchar(50)
Declare @F2 nvarchar(50)
DECLARE Cr CURSOR FOR
select distinct کلاس from viewSupport
OPEN Cr
FETCH NEXT FROM Cr INTO @F1
WHILE @@FETCH_STATUS = 0
BEGIN

DECLARE Cr2 CURSOR FOR
select کلاس,رده,گروه from viewSupport
where کلاس=@F1
OPEN Cr2
.
.
.

CLOSE Cr2
DEALLOCATE Cr2
FETCH NEXT FROM Cr INTO @F1
END
CLOSE Cr
DEALLOCATE Cr
GO

SYNDROME
یک شنبه 06 مرداد 1387, 07:01 صبح
در اول کار برای راحتی کارت یک جدول موقت مثلا با نام Temp1 بساز.
حالا می توانی با استفاده از دستور Insert Int این عمل را انجام دهی.


Insert Into Temp1(Field1,...)
Select Field1,...
From Tbl_Base
Group By Field1,...

حالا که مقادیر را داخل Temp ریختی بر روی آن یک کرسر ایجاد کنم و سپس تتابع فوق را بنویس را مقتدیر را به هم اضافه کند.
موفق باشید

رضا جاسبی
جمعه 11 مرداد 1387, 02:54 صبح
مطمئن نیستم دستور GroupBy اینجا جواب بده. تا جایی که می دونم group By برای فیلدهای محاسباتی تجمعی مثل Sum و Count بکار میره.
اما به هر حال برای چیزی که مد نظر شماست خود SQL در helpesh بخوبی توضیح داده. توی قسمت Index در Help تایپ کن :DECLARE CURSIR و Transact SQL رو انتخاب کن. با اینحال من اون تیکه رو اینجا میارم.
[code]

SET NOCOUNT ON

DECLARE @au_id varchar(11), @au_fname varchar(20), @au_lname varchar(40),
@message varchar(80), @title varchar(80)

PRINT "-------- Utah Authors report --------"

DECLARE authors_cursor CURSOR FOR
SELECT au_id, au_fname, au_lname
FROM authors
WHERE state = "UT"
ORDER BY au_id

OPEN authors_cursor

FETCH NEXT FROM authors_cursor
INTO @au_id, @au_fname, @au_lname

WHILE @@FETCH_STATUS = 0
BEGIN
PRINT " "
SELECT @message = "----- Books by Author: " +
@au_fname + " " + @au_lname

PRINT @message

-- Declare an inner cursor based
-- on au_id from the outer cursor.

DECLARE titles_cursor CURSOR FOR
SELECT t.title
FROM titleauthor ta, titles t
WHERE ta.title_id = t.title_id AND
ta.au_id = @au_id -- Variable value from the outer cursor

OPEN titles_cursor
FETCH NEXT FROM titles_cursor INTO @title

IF @@FETCH_STATUS <> 0
PRINT " <<No Books>>"

WHILE @@FETCH_STATUS = 0
BEGIN

SELECT @message = " " + @title
PRINT @message
FETCH NEXT FROM titles_cursor INTO @title

END

CLOSE titles_cursor
DEALLOCATE titles_cursor

-- Get the next author.
FETCH NEXT FROM authors_cursor
INTO @au_id, @au_fname, @au_lname
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

-------- Utah Authors report --------

----- Books by Author: Anne Ringer
The Gourmet Microwave
Is Anger the Enemy?

----- Books by Author: Albert Ringer
Is Anger the Enemy?
Life Without Fear


[code]

ببخشید هر کاری کردم از چپ به راست نشد.

behzad_taheri20
پنج شنبه 17 مرداد 1387, 00:25 صبح
ممنونم
بسیار راهنمایی بجایی بود
مشکل کاملا حل شد