根据不同的条件从两列中检索值

时间:2014-10-30 09:22:24

标签: sql sql-server

我有一个问题要问你们。我已经继承了'工作中的数据库,我必须使用不同的条件从表创建报告。请注意我没有sql专家,我希望我写的内容有道理。

为了简化,我有一个包含以下内容的HARDWARE表:

  • HWTYPE - 硬件类型
  • HWMODEL - 硬件模型
  • PHONENUM - 电话号码
  • USERID - 用户将硬件分配到

数据如下所示:

HWTYPE | HWMODEL    |  PHONENUM  |  USERID
-------+------------+------------+----------
SIM    |  SIMVOICE  |   123456   |   CIRO

SIM    |  SIMVOICE  |   124578   |   LEO

PHONE  |  APPLE     |            |   CIRO

PHONE  |  SAMSUNG   |            |   LEO

现在您可以看到,每个用户都分配了一部电话和一部带有电话号码的SIM卡。

我需要按用户对数据进行排序,以便查询结果的每一行看起来像:

HW       |   PHONENUM   |  USERID
---------+--------------+------
APPLE    |   123456     |  CIRO

SAMSUNG  |   124578     |   LEO

基本上如此:基于USER的组列PHONENUM和HWMODEL。

这就是我被卡住的地方!我尝试过工会,加入,案件等,但我仍然没有得到正确的结果。 再次为(可能)非常基本的问题道歉。我试图寻找类似但却找不到的东西。

感谢任何想要帮助我的人。 问候 利奥

5 个答案:

答案 0 :(得分:1)

我不知道我理解你的问题 但我认为您只需要为您的O / P

编写以下查询
SELECT 
  HWTYPE, HWMODEL, USERID 
FROM 
  HARDWARE 
GROUP BY  USERID ,HWTYPE,HWMODEL
ORDER BY  HWTYPE 

答案 1 :(得分:1)

将我的评论作为答案;

将其写为SQL:

SELECT 
(HWTYPE, HWMODEL, USERID) 
FROM 
HARDWARE 
GROUP BY (USERID) /*Other Clauses can be added here, but ensure you use commas to seperate them!*/

一步一步:

SELECT ... -> what columns you want to see
FROM ... -> what table you want it from (use joins if you need from multiple tables)
GROUP BY... -> What you want to collect together

还有:

WHERE... -> conditions for when to include/what not to include

答案 2 :(得分:0)

如果您的目标是按用户排序的电话号码和模型列表,则可以使用此查询:

SELECT HWMODEL,PHONENUM,USERID FROM HARDWARE ORDER BY USER

希望能理解你的问题

答案 3 :(得分:0)

SELECT
    hw.HWMODEL as HW
    ,phone.PHONENUM
    ,user.USERID
FROM
    (
        SELECT DISTINCT
            USERID
        FROM
            HARDWARE
    ) as user

    LEFT JOIN
    (
        SELECT
            USERID
            ,PHONENUM
        FROM
            HARDWARE
        WHERE
            PHONENUM IS NOT NULL
    ) as phone
      ON phone.USERID = user.USERID

    LEFT JOIN
    (
        SELECT
            USERID
            ,HWMODEL
        FROM
            HARDWARE
        WHERE
            HWTYPE = 'PHONE'
    ) AS hw
      ON hw.USERID  = user.USERID
ORDER BY
    user.USERID
    ,hw.HWMODEL

答案 4 :(得分:0)

您还可以使用以下查询获得预期结果。这将使用硬件表上的自联接以及减少查询syntex的长度。

SELECT H2.HWMODEL AS HW,H1.PHONENUM,H1.USERID FROM HARDWARE H1 INNER JOIN HARDWARE H2 ON H1.USERID = H2.USERID
    WHERE ISNULL(H1.PHONENUM,'') <> ''
    AND ISNULL(H2.PHONENUM,'') = ''
ORDER BY H2.HWMODEL ASC

希望这会对你有所帮助。