标签: sql-view

在SQL视图中使用COALESCE

我需要从几个表创建一个视图.视图中的一列必须由一个表中的多个行组成,作为带逗号分隔值的字符串.

这是我想要做的简化示例.

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)

t-sql sql-server coalesce sql-server-2008 sql-view

9
推荐指数
2
解决办法
7657
查看次数

如何在视图中创建非空列

给出如下表:

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"?

oracle casting oracle10g sql-view

9
推荐指数
1
解决办法
2万
查看次数

使用JPA时如何在没有主键的情况下映射数据库视图

  • 我在SQL数据库中有视图,没有明显的主键(复合或其他)
  • 我想通过JPA访问它们

我已经读过,我应该能够像处理表格一样处理JPA中的视图(使用@Table注释等).但是,如果没有主键,我必须从每个列中有效地创建一个复合键(实际上,这是Hibernate的逆向工程工具默认情况下所做的).

但是如果我这样做会产生不良副作用.例如

  • 必须编写所有代码指向主键的属性而不是视图:

    myViewObject.getPrimaryKey().的getFirstName()

  • 无法在spring Repository上使用"findBy ..."方法(因为该属性是视图的"标识符"的一部分,而实际上并不是它的一个属性).

我的问题是:如何在这样的地图中映射视图,因为我可以使用JPA轻松访问其属性?

注意:我很高兴被告知我使用完全错误的方法.这似乎是一个普遍存在的问题,必然会有更好的解决方案.

java spring hibernate jpa sql-view

9
推荐指数
1
解决办法
1万
查看次数

MS Access:WHERE-EXISTS子句不能处理视图?

先决条件:在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)

sql database ms-access select sql-view

8
推荐指数
1
解决办法
6364
查看次数

使用分组为视图生成id行

我正在尝试创建一个包含行号的视图,如下所示:

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)

sql postgresql view sql-view window-functions

7
推荐指数
1
解决办法
1万
查看次数

SQL View和WITH子句之间的区别

可以在这里的任何人告诉我VIEW和WITH的区别,因为我已经搜索了很多位置,我找不到任何关于它的信息.
我的想法是VIEW和WITH是相同的,除了VIEWs被保存为Schema对象,但我可能是错的

sql sql-view

7
推荐指数
2
解决办法
7446
查看次数

如何在视图中添加ROW_NUMBER()?

在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 postgresql row-number sql-view

7
推荐指数
1
解决办法
2万
查看次数

忽略使用Entity Framework创建/更改SQL视图的模型

如果我创建一个SQL视图并编写一个模型来表示该视图,我仍然希望它能够映射到能够从SQL视图中读取数据.添加迁移代码将此视为新表,因为实体框架(版本6)不了解视图.

是否存在可以分配的属性,以防止迁移代码认为它需要创建的新表或模型构建器中的某些内容?

sql-server asp.net-mvc entity-framework sql-view

7
推荐指数
1
解决办法
1193
查看次数

SQL Server视图在Entity Framework中返回不同的结果

我在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)

.net vb.net entity-framework sql-view entity-framework-6

7
推荐指数
1
解决办法
1648
查看次数

在 SQL 中向视图添加新列

我有一个数据库,并且我已经用我想要的数据创建了一个视图。数据看起来像这样:

    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 ;,但似乎文本不是数据类型。有什么建议吗?

sql postgresql sql-view

7
推荐指数
1
解决办法
2万
查看次数