如何用SQL一个代码选择多个Row和多个字段

时间:2016-05-19 06:22:55

标签: c# sql sql-server vb.net

我想在桌子上选择多行。但我也希望每一行都选择字段。这是样本表:

---------------------
OrNo | Name    | value 
---------------------
1154 | Michael | 41
1154 | Rico    | 24
1487 | Alex    | 21
1487 | Leo     | 27

我想选择哪里" Orno"表中的代码是多个。所以我希望在" OrNO"中得到每个名字和价值。 例如,我想选择OrNO 1154的位置。如何从该代码中选择所有名称和值?如何用sql数据读取器读取它们?

编辑:

基于回答,对不起,我想在后面的代码上执行,比如使用C#/ VB.Net的sqldatareader。我不知道如何在代码后面执行它们以存储到varriable。

谢谢

4 个答案:

答案 0 :(得分:0)

SELECT *
FROM MyTable
WHERE OrNo IN
(
    SELECT OrNo
    FROM
    (
        SELECT OrNo, COUNT(*) AS RecordCount
        FROM MyTable
        GROUP BY OrNo
    ) A
    WHERE RecordCount > 1
)

答案 1 :(得分:0)

很难理解你的问题。 你在搜索SQL语句吗?如果是这样,我会建议:

SELECT *
FROM <TABLE_NAME> 
WHERE OrNo IN 
(
    SELECT OrNo
    FROM <TABLE_NAME>
    GROUP BY OrNo
    HAVING COUNT(*) > 1
)

对不起,@ jmcilhinney在这里更快。

答案 2 :(得分:0)

您希望每个OrNo返回重复记录,因此按OrNo计数并仅返回带有&gt;的记录1。

select orno, name, value
from
(
  select orno, name, value, count(*) over (partition by orno) as cnt
  from mytable
)
where cnt > 1
order by orno;

答案 3 :(得分:0)

还有一个,有关系

with t as (
  select * from (values 
    (1154,'Michael',41),
    (1154,'Rico',24),
    (1199,'Mary',25),
    (1487,'Alex',21),
    (1487,'Leo',27)) t(OrNo, Name, value )
)
select top(1) with ties OrNo, Name, value 
from t 
order by 
case count(*) over (partition by OrNo ) when 1 then 1 else 0 end