我需要从几个表创建一个视图.视图中的一列必须由一个表中的多个行组成,作为带逗号分隔值的字符串.
这是我想要做的简化示例.
Customers:
CustomerId int
CustomerName VARCHAR(100)
Orders:
CustomerId int
OrderName VARCHAR(100)
Run Code Online (Sandbox Code Playgroud)
客户和订单之间存在一对多的关系.所以给出了这些数据
Customers
1 'John'
2 'Marry'
Orders
1 'New Hat'
1 'New Book'
1 'New Phone'
Run Code Online (Sandbox Code Playgroud)
我希望视图是这样的:
Name Orders
'John' New Hat, New Book, New Phone
'Marry' NULL
Run Code Online (Sandbox Code Playgroud)
因此无论他们是否有订单,每个人都会出现在表格中.
我有一个存储过程,我需要转换到这个视图,但似乎你不能声明参数并在视图中调用存储过程.有关如何将此查询添加到视图中的任何建议?
CREATE PROCEDURE getCustomerOrders(@customerId int)
AS
DECLARE @CustomerName varchar(100)
DECLARE @Orders varchar (5000)
SELECT @Orders=COALESCE(@Orders,'') + COALESCE(OrderName,'') + ','
FROM Orders WHERE CustomerId=@customerId
-- this has to be done separately in case orders returns NULL, so no customers are …Run Code Online (Sandbox Code Playgroud) 给出如下表:
CREATE TABLE "MyTable"
(
"MyColumn" NUMBER NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
我想创建一个视图,如:
CREATE VIEW "MyView" AS
SELECT
CAST("MyColumn" AS BINARY_DOUBLE) AS "MyColumn"
FROM "MyTable";
Run Code Online (Sandbox Code Playgroud)
仅在"MyColumn"列为"NOT NULL"的位置.
在SQL Server中,这非常简单:
CREATE VIEW [MyView] AS
SELECT
ISNULL(CAST([MyColumn] AS Float), 0.0) AS [MyColumn]
FROM [MyTable];
Run Code Online (Sandbox Code Playgroud)
但是,Oracle等效项会产生"NULL"列:
CREATE VIEW "MyView" AS
SELECT
NVL(CAST("MyColumn" AS BINARY_DOUBLE), 0.0) AS "MyColumn"
FROM "MyTable";
Run Code Online (Sandbox Code Playgroud)
反正是否强制Oracle将视图的列标记为元数据中的"NOT NULL"?
我已经读过,我应该能够像处理表格一样处理JPA中的视图(使用@Table注释等).但是,如果没有主键,我必须从每个列中有效地创建一个复合键(实际上,这是Hibernate的逆向工程工具默认情况下所做的).
但是如果我这样做会产生不良副作用.例如
必须编写所有代码指向主键的属性而不是视图:
myViewObject.getPrimaryKey().的getFirstName()
无法在spring Repository上使用"findBy ..."方法(因为该属性是视图的"标识符"的一部分,而实际上并不是它的一个属性).
我的问题是:如何在这样的地图中映射视图,因为我可以使用JPA轻松访问其属性?
注意:我很高兴被告知我使用完全错误的方法.这似乎是一个普遍存在的问题,必然会有更好的解决方案.
先决条件:在MS Access 2010中,创建以下表:
CREATE TABLE ATBL(ID INT);
INSERT INTO ATBL(ID) VALUES (1);
INSERT INTO ATBL(ID) VALUES (2);
INSERT INTO ATBL(ID) VALUES (3);
CREATE TABLE BTBL(ID INT);
INSERT INTO BTBL(ID) VALUES (1);
INSERT INTO BTBL(ID) VALUES (2);
Run Code Online (Sandbox Code Playgroud)
还要创建一个名为BVIEW的视图,它使用以下SELECT语句:
SELECT A.ID FROM ATBL AS A WHERE A.ID = 1 OR A.ID = 2
Run Code Online (Sandbox Code Playgroud)
现在BVIEW应该具有与BTBL相同的内容.然而,以下两个查询将返回不同的结果:
SELECT A.ID FROM ATBL AS A WHERE EXISTS (SELECT 1 FROM BTBL AS B WHERE B.ID=A.ID)
SELECT A.ID FROM ATBL AS A WHERE EXISTS (SELECT 1 FROM BVIEW …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个包含行号的视图,如下所示:
create or replace view daily_transactions as
select
generate_series(1, count(t)) as id,
t.ic,
t.bio_id,
t.wp,
date_trunc('day', t.transaction_time)::date transaction_date,
min(t.transaction_time)::time time_in,
w.start_time wp_start,
w.start_time - min(t.transaction_time)::time in_diff,
max(t.transaction_time)::time time_out,
w.end_time wp_end,
max(t.transaction_time)::time - w.end_time out_diff,
count(t) total_transactions,
calc_att_status(date_trunc('day', t.transaction_time)::date,
min(t.transaction_time)::time,
max(t.transaction_time)::time,
w.start_time, w.end_time ) status
from transactions t
left join wp w on (t.wp = w.wp_name)
group by ic, bio_id, t.wp, date_trunc('day', transaction_time),
w.start_time, w.end_time;
Run Code Online (Sandbox Code Playgroud)
我最终得到了重复的行.SELECT DISTINCT也不起作用.有任何想法吗?
交易表:
create table transactions(
id serial primary key,
ic text references users(ic), …Run Code Online (Sandbox Code Playgroud) 可以在这里的任何人告诉我VIEW和WITH的区别,因为我已经搜索了很多位置,我找不到任何关于它的信息.
我的想法是VIEW和WITH是相同的,除了VIEWs被保存为Schema对象,但我可能是错的
在PostgreSQL 8.4中,我想从3个带id的表创建一个视图.所以我希望在我看来有这个结构:
num serial,
name_dispatcher character varying(250)
the_geom geometry
Run Code Online (Sandbox Code Playgroud)
我可以选择name_dispatcher,并the_geom从表:
CREATE VIEW lineView
AS SELECT 'name' AS name_dispatcher, the_geom
FROM line1
UNION
SELECT 'name' AS name_dispatcher, the_geom
FROM line2
UNION
SELECT 'name' AS name_dispatcher, the_geom
FROM line3
Run Code Online (Sandbox Code Playgroud)
如何num在视图中创建列?
UPDATE
我找到了解决方案:
ROW_NUMBER() OVER(ORDER BY lineView.voltage)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用它ALTER VIEW.我怎么把它放在那里?
如果我创建一个SQL视图并编写一个模型来表示该视图,我仍然希望它能够映射到能够从SQL视图中读取数据.添加迁移代码将此视为新表,因为实体框架(版本6)不了解视图.
是否存在可以分配的属性,以防止迁移代码认为它需要创建的新表或模型构建器中的某些内容?
我在SQl服务器中有一个sql视图:
SELECT dbo.job.idJob, SUM(dbo.tracking.iQty) AS TotalOrdered, dbo.tracking.idProduct
FROM dbo.tracking INNER JOIN
dbo.job ON dbo.tracking.idJob = dbo.job.idJob
GROUP BY dbo.tracking.idAction, dbo.tracking.idProduct, dbo.job.idJob
Run Code Online (Sandbox Code Playgroud)
在SQL Server中它返回:
idJob TotalOrdered idProduct
----------- ------------ -----------
5000 150 9
5000 75 18
5006 20 3
Run Code Online (Sandbox Code Playgroud)
当我通过WPF 4.5项目中的Entity Framework 6访问此视图时,它返回不同的结果.我将视图添加到edmx文件,然后以下列方式调用视图:
Public Function GetTracking_Ordered(idJob As Integer) As Collection(Of vw_Tracking_Ordered) Implements ITrackingDataService.GetTracking_Ordered
Try
Using context = _ModelService.NewContext
Dim trackingList = (From recs In context.vw_Tracking_Ordered Where recs.idJob = idJob Select recs).ToList
Return New Collection(Of vw_Tracking_Ordered)(trackingList)
End Using
Catch ex As …Run Code Online (Sandbox Code Playgroud) 我有一个数据库,并且我已经用我想要的数据创建了一个视图。数据看起来像这样:
n | value |
----------+---------+
50404791 | 112 |
5034591 | 164 |
50280287 | 31 |
Run Code Online (Sandbox Code Playgroud)
我想添加一列这样的文本:
n | value | status |
----------+---------+--------+
50404791 | 112 |default |
5034591 | 164 |biggest |
50280287 | 31 |smallest|
Run Code Online (Sandbox Code Playgroud)
我尝试过Alter Table Table1 Add Column status text ;,但似乎文本不是数据类型。有什么建议吗?