PDA

View Full Version : multiple columns in subQuery



مهدی هادیان2
پنج شنبه 18 خرداد 1391, 17:14 عصر
بسم الله الرحمن الرحیم
با سلام
می خوام تمام ستون ها رو در یک ساب کوئری بگیرم؛ در حال حاضر به شکل زیر عمل می کنم و خطا می ده:
select table1.*,
(select * from table2) Table2
from table1
با تشکر

Felony
پنج شنبه 18 خرداد 1391, 18:19 عصر
SELECT T1.*, T2.* FROM Table1 T1, (SELECT * FROM Table2) T2

مهدی هادیان2
شنبه 20 خرداد 1391, 10:15 صبح
SELECT T1.*, T2.* FROM Table1 T1, (SELECT * FROM Table2) T2
از اینکه وقت گذاشتید ممنون. ولی متاسفانه برای حالتی که من دارم جواب نمی ده. می خواستم کدهام رو بهینه کنم.
دوستان کدهام رو می زارم تا یه نگاهی بهشون بیندازید و بهینه کنید.
کد زیر مربوط به یه فانکشن میشه که ازش برای گرفتن گروه و زیرگروه کالا استفاده می کنم
USE [school1]
GO
/****** Object: UserDefinedFunction [dbo].[GetGroups] Script Date: 06/09/2012 09:40:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[GetGroups] ( @CommodityCode bigint )
RETURNS @Groups TABLE
(
PrimaryGroupCode int,
PrimaryCommodityGroupCode bigint,
SubGroupCode int,
SubCommodityGroupCode bigint,
PrimaryGroupName nvarchar(50),
SubGroupName nvarchar(50)


)
AS
BEGIN
declare @countGroup int
select @countGroup=count(dbo.CommodityGroup.GroupCode)
from CommodityGroup
where CommodityCode=@CommodityCode
if(@countGroup=2)
INSERT @Groups
select TOP (1)
(SELECT TOP (1) GroupCode
FROM dbo.CommodityGroup AS CommodityGroup_2
WHERE (CommodityCode = @CommodityCode)) AS PrimaryGroupCode
,
(select top (1) CommodityGroupCode
from dbo.CommodityGroup
where (CommodityCode = @CommodityCode)) AS PrimaryCommodityGroupCode,
(SELECT TOP (1) GroupCode
FROM dbo.CommodityGroup AS CommodityGroup_1
WHERE (CommodityCode = @CommodityCode)
ORDER BY GroupCode DESC) AS SubGroupCode,
(select top (1) CommodityGroupCode
from dbo.CommodityGroup
where (CommodityCode = @CommodityCode)
ORDER BY CommodityGroupCode DESC) AS SubCommodityGroupCode,
(SELECT TOP (1) dbo.TreeGroups.Title
FROM dbo.TreeGroups INNER JOIN
dbo.CommodityGroup ON dbo.TreeGroups.GroupCode = dbo.CommodityGroup.GroupCode
WHERE (dbo.CommodityGroup.CommodityCode = @CommodityCode)) AS PrimaryGroupName,
(SELECT TOP (1) TreeGroups_1.Title
FROM dbo.TreeGroups AS TreeGroups_1 INNER JOIN
dbo.CommodityGroup AS CommodityGroup_1 ON TreeGroups_1.GroupCode = CommodityGroup_1.GroupCode
WHERE (CommodityGroup_1.CommodityCode = @CommodityCode)
ORDER BY TreeGroups_1. GroupCode DESC) AS SubGroupName
from dbo.commodity
else
INSERT @Groups
select TOP (1)
(SELECT TOP (1) GroupCode
FROM dbo.CommodityGroup AS CommodityGroup_2
WHERE (CommodityCode = @CommodityCode)) AS PrimaryGroupCode,
(select top (1) CommodityGroupCode
from dbo.CommodityGroup
where (CommodityCode = @CommodityCode)) AS PrimaryCommodityGroupCode,null as SubGroupCode,
null as SubCommodityGroupCode,
(SELECT TOP (1) dbo.TreeGroups.Title
FROM dbo.TreeGroups INNER JOIN
dbo.CommodityGroup ON dbo.TreeGroups.GroupCode = dbo.CommodityGroup.GroupCode
WHERE (dbo.CommodityGroup.CommodityCode = @CommodityCode)) AS PrimaryGroupName,
null as SubGroupName


from dbo.commodity


RETURN
END

و در ویوی زیر از اون استفاده می کنم
SELECT CommodityCode, BarCode, Nam AS CommodityName,
(SELECT Nam
FROM dbo.Unit
WHERE (UnitCode = dbo.Commodity.UnitCode)) AS UnitName, SalePrice,
(SELECT branchcode
FROM dbo.staff
WHERE (staffcode = dbo.Commodity.staffcode)) AS branchcode,
(SELECT TOP (1) PrimaryGroupName
FROM dbo.GetGroups(dbo.Commodity.CommodityCode) AS GetGroups_4) AS PrimaryGroupName,
(SELECT TOP (1) SubGroupName
FROM dbo.GetGroups(dbo.Commodity.CommodityCode) AS GetGroups_1) AS SubGroupName,
(SELECT TOP (1) PrimaryGroupCode
FROM dbo.GetGroups(dbo.Commodity.CommodityCode) AS GetGroups_2) AS PrimaryGroupCode,
(SELECT TOP (1) SubGroupCode
FROM dbo.GetGroups(dbo.Commodity.CommodityCode) AS GetGroups_3) AS SubGroupCode,
(SELECT TOP (1) PrimaryCommodityGroupCode
FROM dbo.GetGroups(dbo.Commodity.CommodityCode) AS GetGroups_6) AS PrimaryCommodityGroupCode,
(SELECT TOP (1) SubCommodityGroupCode
FROM dbo.GetGroups(dbo.Commodity.CommodityCode) AS GetGroups_5) AS SubCommodityGroupCode,
(SELECT UnitCode
FROM dbo.Unit AS Unit_1
WHERE (UnitCode = dbo.Commodity.UnitCode)) AS UnitCode
FROM dbo.Commodity
با تشکر

baktash.n81@gmail.com
شنبه 20 خرداد 1391, 15:15 عصر
فکر کنم جداول رو بزارید بهتر باشه ...

مهدی هادیان2
شنبه 20 خرداد 1391, 17:16 عصر
فکر کنم جداول رو بزارید بهتر باشه ...
بهش فکر کرده بودم ولی چون نیاز به توضیحات تکمیلی داره این کار رو نکردم و ترجیح دادم روی تکه کدی که مشکل دارم کار کنیم
با تشکر

یوسف زالی
شنبه 20 خرداد 1391, 17:54 عصر
سلام.



SELECT T1.*, T2.* FROM Table1 T1, (SELECT * FROM Table2) T2




این که شد همون select * from Tbl1, Tbl2

شما باید بدونی که فیلدهاتون چه رابطه ای با هم دارند . آیا پدر فرزندند یا نه؟
توضیح مکفی نیست.

مهدی هادیان2
شنبه 20 خرداد 1391, 22:16 عصر
سلام.


این که شد همون select * from Tbl1, Tbl2

شما باید بدونی که فیلدهاتون چه رابطه ای با هم دارند . آیا پدر فرزندند یا نه؟
توضیح مکفی نیست.
با سلام
از اینکه وقت گذاشتید ممنون
SELECT T1.*, T2.* FROM Table1 T1, (SELECT * FROM Table2) T2

رو دوستمون آقا مجتبی گفتن
بنده کدم رو بالا گذاشتم؛ قصدم اینکه به جای اینکه در تکه کد (SELECT TOP (1) PrimaryGroupName FROM dbo.GetGroups(dbo.Commodity.CommodityCode) AS GetGroups_4) AS PrimaryGroupName,
(SELECT TOP (1) SubGroupName
FROM dbo.GetGroups(dbo.Commodity.CommodityCode) AS GetGroups_1) AS SubGroupName,
(SELECT TOP (1) PrimaryGroupCode
FROM dbo.GetGroups(dbo.Commodity.CommodityCode) AS GetGroups_2) AS PrimaryGroupCode,
(SELECT TOP (1) SubGroupCode
FROM dbo.GetGroups(dbo.Commodity.CommodityCode) AS GetGroups_3) AS SubGroupCode,
(SELECT TOP (1) PrimaryCommodityGroupCode
FROM dbo.GetGroups(dbo.Commodity.CommodityCode) AS GetGroups_6) AS PrimaryCommodityGroupCode,
(SELECT TOP (1) SubCommodityGroupCode
FROM dbo.GetGroups(dbo.Commodity.CommodityCode) AS GetGroups_5) AS SubCommodityGroupCode
چند بار تابع GetGroups رو فراخوانی کنم؛ یک بار این کار رو انجام بدم.
با تشکر فراوان

mehdi.mousavi
شنبه 20 خرداد 1391, 22:29 عصر
سلام.
GetGroups اونطوریکه مشخصه، یک Table-Valued Function هستش، درسته؟
اگر اینطوره، شما براحتی می تونید با استفاده از APPLY (http://msdn.microsoft.com/en-us/library/ms175156%28v=sql.105%29.aspx) (حالا Outer یا Cross) به هدفتون برسید:

SELECT g.SubGroupName, g.PrimaryGroupName, c.Whatever
FROM Commodity AS c
CROSS APPLY GetGroups(c.CommodityCode) AS g;

موفق باشید.

مهدی هادیان2
یک شنبه 21 خرداد 1391, 09:46 صبح
سلام.
GetGroups اونطوریکه مشخصه، یک Table-Valued Function هستش، درسته؟
اگر اینطوره، شما براحتی می تونید با استفاده از APPLY (http://msdn.microsoft.com/en-us/library/ms175156%28v=sql.105%29.aspx) (حالا Outer یا Cross) به هدفتون برسید:

SELECT g.SubGroupName, g.PrimaryGroupName, c.Whatever
FROM Commodity AS c
CROSS APPLY GetGroups(c.CommodityCode) AS g;

موفق باشید.
با سلام
از اینکه وقت گذاشتید ممنون
جواب کوئری رو درست می ده.ولی متاسفانه وقتی از کدم در یک ویو استفاده می کنم خطای
SQL text cannot be represented in the grid pane and diagram pane.
رو میده.