Форум программистов, компьютерный форум, киберфорум
Наши страницы

Microsoft SQL Server

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.78
Psilon
Master of Orion
Эксперт .NET
5916 / 4815 / 634
Регистрация: 10.07.2011
Сообщений: 14,426
Записей в блоге: 5
Завершенные тесты: 4
#1

Вычисляемый по другой таблице столбец - SQL Server

23.05.2013, 16:39. Просмотров 4599. Ответов 19
Метки нет (Все метки)

Собственно вопрос: у меня есть в одной таблице идентификатор товара и его количество, в другой таблице - цена за штуку.

Вопрос: как мне в первой таблице сделать поле TotalCount - общая цена? Я пытался сделать так
T-SQL
1
2
3
4
5
6
CREATE TABLE [dbo].[Services](
    [ServiceID] [int] IDENTITY(1,1) NOT NULL,
    [VisitID] [int] NOT NULL,
    [ConsumableID] [int] NOT NULL,
    [Count] [int] NOT NULL,
    [TotalPrice]  AS ([Count]*(SELECT MAX(Price) FROM Consumables WHERE Services.ConsumableID = Consumables.ConsumableID)
но он ругается...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2013, 16:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычисляемый по другой таблице столбец (SQL Server):

Невозможно материализовать вычисляемый столбец "CHECK_STATE" в таблице "ROBJECT", так как он является недетерм - SQL Server
ALTER TABLE ROBJECT ADD CHECK_STATE AS case when CHECK_DATE is null then 'Замечаний нет' when (CONVERT (date, CURRENT_TIMESTAMP)) <=...

вычисляемый столбец - SQL Server
у меня есть table1 с полями id sum ............. и table2 с полями id id_table1 sum........ ...

Вычисляемый столбец - SQL Server
Здравствуйте, ребята! Существует таблица CREATE TABLE .( IDENTITY(1,1) NOT NULL, NULL, (50) NOT NULL, CONSTRAINT ...

Вычисляемый столбец - SQL Server
Всем доброго времени суток. Есть таблица: CREATE TABLE .( IDENTITY(1,1) NOT NULL, NOT NULL, NOT NULL, (255) NOT...

Вычисляемый столбец - SQL Server
Всем доброго времени суток, помогите пожалуйста. Мне необходимо в таблице создать вычисляемый столбец - в одной мз табл у меня хранятся...

Вычисляемый столбец. Конвертация типов. - SQL Server
Имею таблицу table В ней столбец "id" - int и столбец "data" - data. Хочу сделать вычисляемый столбец, допустим ident (скажем типа...

19
analyst
434 / 141 / 9
Регистрация: 12.01.2009
Сообщений: 675
Записей в блоге: 1
23.05.2013, 16:53 #2
По моему так сделать нельзя. Это через view сделать можно. Но может знатоки исправят)
0
Psilon
Master of Orion
Эксперт .NET
5916 / 4815 / 634
Регистрация: 10.07.2011
Сообщений: 14,426
Записей в блоге: 5
Завершенные тесты: 4
23.05.2013, 17:04  [ТС] #3
TotalPrice, извиняюсь.
0
iap
775 / 585 / 111
Регистрация: 27.11.2009
Сообщений: 1,717
23.05.2013, 17:30 #4
Цитата Сообщение от analyst Посмотреть сообщение
По моему так сделать нельзя. Это через view сделать можно. Но может знатоки исправят)
Можно.
Но сначала надо сделать скалярную функцию, которая возвращает максимум по передаваемому id.
В определении вычисляемого поля использовать эту функцию вместо подзапроса.

Но это тормозной путь.
Лучше вычислять в запросе, джойнясь к соответствующей таблице.
Или действительно VIEW
1
pincet
1256 / 842 / 98
Регистрация: 23.07.2010
Сообщений: 4,397
23.05.2013, 17:38 #5
IMHO - вычисляемые поля - от лукавого. Слишком "plastic" (за что люблю English - можно вот так сказать )
Изменится бизнес-логика - нахватаешься.
0
Psilon
Master of Orion
Эксперт .NET
5916 / 4815 / 634
Регистрация: 10.07.2011
Сообщений: 14,426
Записей в блоге: 5
Завершенные тесты: 4
23.05.2013, 17:41  [ТС] #6
И что делать?

Могу привести схему БД и как я себе это представляю

Что такое VIEW хз. Подозреваю, что вынос логики в гуи, но не уверен
0
pincet
1256 / 842 / 98
Регистрация: 23.07.2010
Сообщений: 4,397
23.05.2013, 17:54 #7
VIEW - витрина или представление. Погугли, я думаю ты разберешься

Добавлено через 1 минуту
http://serversql.ru/predstavlenija-%E2%80%93-view.html
1
Psilon
Master of Orion
Эксперт .NET
5916 / 4815 / 634
Регистрация: 10.07.2011
Сообщений: 14,426
Записей в блоге: 5
Завершенные тесты: 4
23.05.2013, 18:12  [ТС] #8
pincet, ну я примерно так и представлял. Просто для меня view - это ГУИ в контексте MVC
0
analyst
434 / 141 / 9
Регистрация: 12.01.2009
Сообщений: 675
Записей в блоге: 1
23.05.2013, 18:28 #9
Цитата Сообщение от iap Посмотреть сообщение
Можно.
Но сначала надо сделать скалярную функцию, которая возвращает максимум по передаваемому id.
В определении вычисляемого поля использовать эту функцию вместо подзапроса.

Но это тормозной путь.
Я скорее это имел в виду.
0
Psilon
Master of Orion
Эксперт .NET
5916 / 4815 / 634
Регистрация: 10.07.2011
Сообщений: 14,426
Записей в блоге: 5
Завершенные тесты: 4
23.05.2013, 18:29  [ТС] #10
analyst, да на самом деле у меня БД на десяток записей (учебная). Поэтому мне пофиг на тормоза. Мне важнее простота. В первую очередь для понимания. Завтра зачет - так что к завтрашнему дню надо уже все сделать и запросы написать. Самосовершенствоваться можно на летних каникулах будет
0
analyst
434 / 141 / 9
Регистрация: 12.01.2009
Сообщений: 675
Записей в блоге: 1
23.05.2013, 18:32 #11
Успехов!)
0
Psilon
Master of Orion
Эксперт .NET
5916 / 4815 / 634
Регистрация: 10.07.2011
Сообщений: 14,426
Записей в блоге: 5
Завершенные тесты: 4
23.05.2013, 20:28  [ТС] #12
Не могу понять, в чем фишка, создал функцию:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ALTER FUNCTION [dbo].[GetPrice] 
(
    -- Add the parameters for the function here
    @ConsumableID int   
)
RETURNS int
AS
BEGIN
    -- Insert statements for procedure here
    DECLARE @Result int;
    SET @Result = ( SELECT MAX(Price)
                    FROM Consumables
                    WHERE ConsumableID = @ConsumableID)
    -- Return the result of the function
    RETURN @Result
END
пытаюсь вызвать как на картинке: нифига
Вычисляемый по другой таблице столбец
0
Psilon
Master of Orion
Эксперт .NET
5916 / 4815 / 634
Регистрация: 10.07.2011
Сообщений: 14,426
Записей в блоге: 5
Завершенные тесты: 4
23.05.2013, 21:17  [ТС] #13
Даже вот так пишу: послыает:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
USE [Radik]
GO
 
/****** Object:  UserDefinedFunction [dbo].[GetPrice]    Script Date: 23.05.2013 20:40:06 ******/
DROP FUNCTION [dbo].[GetPrice]
GO
 
/****** Object:  UserDefinedFunction [dbo].[GetPrice]    Script Date: 23.05.2013 20:40:06 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[GetPrice] 
(
    -- Add the parameters for the function here
    @ConsumableID int   
)
RETURNS int
AS
BEGIN
    -- Insert statements for procedure here
    DECLARE @Result int;
    SET @Result = ( SELECT MAX(Price)
                    FROM Consumables
                    WHERE ConsumableID = @ConsumableID)
    -- Return the result of the function
    RETURN @Result
END
 
GO
 
 
SELECT GetPrice(1)

Добавлено через 9 минут
В общем написал такой триггер, пока хватит:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
USE [Radik]
GO
/****** Object:  Trigger [dbo].[TotalPriceTrigger]    Script Date: 23.05.2013 21:07:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [dbo].[TotalPriceTrigger]  
   ON  [dbo].[Benefits]
   AFTER INSERT, UPDATE
AS 
BEGIN
    UPDATE Benefits
    SET TotalPrice = Quantity * ( SELECT MAX(Price)
                    FROM Consumables
                    WHERE ConsumableID = Consumables.ConsumableID)
END
Добавлено через 8 минут
Только как-то не работает...
0
_katon_
307 / 196 / 1
Регистрация: 03.10.2011
Сообщений: 806
24.05.2013, 16:47 #14
А схему перед названием функции пробовали добавлять?
T-SQL
1
Select dbo.functionName(value)
0
Psilon
Master of Orion
Эксперт .NET
5916 / 4815 / 634
Регистрация: 10.07.2011
Сообщений: 14,426
Записей в блоге: 5
Завершенные тесты: 4
24.05.2013, 17:56  [ТС] #15
_katon_, пробовал, все равно не хочет.

Ладно, пока закрыли тему, всем спасибо за помощь
0
24.05.2013, 17:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2013, 17:56
Привет! Вот еще темы с ответами:

Вычисляемый столбец в Microsoft SQL Server - SQL Server
Здравствуйте.Можно ли в Microsoft SQL Server 2008 создать вычисляемый столбец в таблице? Необходимо чтобы в этот столбец вносились...

Запрос: приравнять значение в одной таблице значению в другой таблице - SQL Server
как можно осуществить запрос : приравнять значение одной таблицы значению в другой таблицы idn | name idf | fname

Обновить поле в одной таблице по совокупному значению других полей в другой таблице - SQL Server
Добрый день! Хотелось бы совета по следующей проблеме: Требуется обновить поле в одной таблице по совокупному значению других...

Первичный ключ заполнен в одной таблице норм, он же в другой таблице внешний NULL - SQL Server
Всем доброго времени суток! Проблема следующая: Использую &quot;SQL server management studio 2012&quot;, есть бекап базы данных с которой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.