English 中文(简体)
卡克服务器的案例?
原标题:Case in SQL Server?
  • 时间:2010-11-10 11:36:03
  •  标签:
  • sql

我正在通过处理一些问题来学习SQ服务器。

在其中一个问题中,我有4个数据库表:<编码> ORDERS,SHIPments, WHFICHES和ATTACHments

其中一份是关于指定为<编码>的其他表格的附文。 ATTACHments。 它有3栏:

  • LREF (Unique ref as primary key)
  • RECREF (Records ref)
  • RECTYPE (Record type)

“alt

通过核对<代码>RECTYPE的价值,我希望通过<代码>RECREF与其他表格合并。

这里,我转接案件:

SELECT LREF,RECREF,RECTYPE,
CASE RECTYPE 
WHEN 100 THEN (SELECT O.ORDERNO FROM AV_ATTACHMENTS A LEFT OUTER JOIN AV_ORDERS O ON A.RECREF = O.LREF WHERE A.RECREF = O.LREF)   
WHEN 200 THEN (SELECT S.FSNNO FROM AV_ATTACHMENTS A LEFT OUTER JOIN AV_SHIPMENTS S ON A.RECREF = S.LREF WHERE A.RECREF = S.LREF)
ELSE (SELECT F.WHFICHENO FROM AV_ATTACHMENTS A LEFT OUTER JOIN AV_WHFICHES F ON A.RECREF = F.WHFICHENO WHERE A.RECREF = F.LREF)
END AS FICHE
 FROM AV_ATTACHMENTS 

此外,在其他表格中,I有独特的主要钥匙LREF,另一个数值将用作。 FICHENO

我收到这一警告:

Msg 512, Level 16, State 1, Line 1 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , , >= or when the subquery is used as an expression.

What should I do exactly, because I can t find any solution. Should I change my SQL statement? Any suggestions?

My kind regards and thanks in advance.

最佳回答

鉴于你回来的错误需要改变询问。 下面几句可能更接近你们想要的东西:

SELECT LREF, RECREF, RECTYPE
  FROM AV_ATTACHMENTS V
LEFT OUTER JOIN (SELECT A.LREF, O.ORDERNO AS FICHE
                   FROM AV_ATTACHMENTS A
                 LEFT OUTER JOIN AV_ORDERS O
                   ON A.RECREF = O.LREF
                 WHERE A.RECREF = O.LREF) T1
  ON (V.RECTYPE = 100 AND
      T1.LREF = V.LREF)
LEFT OUTER JOIN (SELECT A.LREF, S.FSNNO A FICHE
                   FROM AV_ATTACHMENTS A
                 LEFT OUTER JOIN AV_SHIPMENTS S
                   ON A.RECREF = S.LREF
                 WHERE A.RECREF = S.LREF) T2
  ON (V.RECTYPE = 200 AND
      T2.LREF = V.LREF)
LEFT OUTER JOIN (SELECT A.LREF, F.WHFICHENO AS FICHE
                   FROM AV_ATTACHMENTS A
                 LEFT OUTER JOIN AV_WHFICHES F
                   ON A.RECREF = F.WHFICHENO
                 WHERE A.RECREF = F.LREF) T3
  ON (V.RECTYPE NOT IN (100, 200) AND
      T3.LREF = V.LREF);

Share and enjoy.

问题回答

尝试如下:

SELECT  A.LREF, 
        A.RECREF, 
        A.RECTYPE,
        CASE A.RECTYPE 
            WHEN 100 THEN O.ORDERNO
            WHEN 200 THEN S.FSNNO
            WHEN 300 THEN F.WHFICHENO
            ELSE NULL
        END AS FICHE
FROM        AV_ATTACHMENTS A
LEFT JOIN   AV_ORDERS O 
        ON  A.RECREF = O.LREF
        AND A.RECTYPE = 100
LEFT JOIN   AV_SHIPMENTS S 
        ON  A.RECREF = S.LREF
        AND A.RECTYPE = 200
LEFT JOIN   AV_WHFICHES F 
        ON  A.RECREF = F.WHFICHENO
        AND A.RECTYPE = 300

你的子座放在了选择发言中,因此不可能在一个单一的选择领域有多重结果。 这样做的一个途径是将<代码>SlectT TOP 1列入您的分册。

在条件允许的情况下,可插入两个温带。

并加入这些温带!

以下简称表:

SELECT LREF,RECREF,RECTYPE, 
       CASE RECTYPE
          WHEN 100 THEN (
                         SELECT TOP 1 O.ORDERNO 
                           FROM AV_ATTACHMENTS A 
                                LEFT OUTER JOIN AV_ORDERS O 
                                   ON A.RECREF = O.LREF 
                          WHERE A.RECREF = O.LREF
                        )
          WHEN 200 THEN (
                         SELECT TOP 1 S.FSNNO 
                           FROM AV_ATTACHMENTS A 
                                LEFT OUTER JOIN AV_SHIPMENTS S 
                                   ON A.RECREF = S.LREF 
                          WHERE A.RECREF = S.LREF
                        ) 
          ELSE (
                SELECT TOP 1 F.WHFICHENO 
                  FROM AV_ATTACHMENTS A 
                       LEFT OUTER JOIN AV_WHFICHES F 
                          ON A.RECREF = F.WHFICHENO 
                 WHERE A.RECREF = F.LREF
               ) 
       END AS FICHE 
  FROM AV_ATTACHMENTS;




相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

难以执行 REGEXP_SUBSTR

I m 查询Oracle 10g。 我有两张表格(样本数据见下文)。 i m 试图提取一些领域

SQL Query Shortcuts

What are some cool SQL shorthands that you know of? For example, something I learned today is you can specify to group by an index: SELECT col1, col2 FROM table GROUP BY 2 This will group by col2

PHP array callback functions for cleaning output

I have an array of output from a database. I am wondering what the cleanest way to filter the values is example array Array ( [0] => Array ( [title] => title 1 ...

OracleParameter and DBNull.Value

we have a table in an Oracle Database which contains a column with the type Char(3 Byte). Now we use a parameterized sql to select some rows with a DBNull.Value and it doesn t work: OracleCommand ...

Running numbers in SQL

I have a SQL-statement like this: SELECT name FROM users WHERE deleted = 0; How can i create a result set with a running number in the first row? So the result would look like this: 1 Name_1 2 ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签