Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql h、 这取决于你是否想将听起来与一个地址相同(我想是同一个街道名称在该州的另一个城镇)的单独地址计算为一个地址。@lijie同意,但我认为即使是次选择的版本也不能真正满足froadie的要求,尽管他说了什么-我认为他更可能希望每个不同的地址有一行, sta_Sql_Join_Self Join - Fatal编程技术网

Sql h、 这取决于你是否想将听起来与一个地址相同(我想是同一个街道名称在该州的另一个城镇)的单独地址计算为一个地址。@lijie同意,但我认为即使是次选择的版本也不能真正满足froadie的要求,尽管他说了什么-我认为他更可能希望每个不同的地址有一行, sta

Sql h、 这取决于你是否想将听起来与一个地址相同(我想是同一个街道名称在该州的另一个城镇)的单独地址计算为一个地址。@lijie同意,但我认为即使是次选择的版本也不能真正满足froadie的要求,尽管他说了什么-我认为他更可能希望每个不同的地址有一行, sta,sql,join,self-join,Sql,Join,Self Join,h、 这取决于你是否想将听起来与一个地址相同(我想是同一个街道名称在该州的另一个城镇)的单独地址计算为一个地址。@lijie同意,但我认为即使是次选择的版本也不能真正满足froadie的要求,尽管他说了什么-我认为他更可能希望每个不同的地址有一行, state@jackpdouglas:是的,我认为这是我的真实意图(但在OP确认之前,我仍在读心术)。为此,只需在SELECT关键字后添加DISTINCT就足够了(我没有足够的经验知道,但如果我不需要子查询,我自然会尝试这样做)@lijie这会得到“


h、 这取决于你是否想将听起来与一个地址相同(我想是同一个街道名称在该州的另一个城镇)的单独地址计算为一个地址。@lijie同意,但我认为即使是次选择的版本也不能真正满足froadie的要求,尽管他说了什么-我认为他更可能希望每个不同的地址有一行, state@jackpdouglas:是的,我认为这是我的真实意图(但在OP确认之前,我仍在读心术)。为此,只需在
SELECT
关键字后添加
DISTINCT
就足够了(我没有足够的经验知道,但如果我不需要子查询,我自然会尝试这样做)@lijie这会得到“正确”的行数,但是
计数不起作用-看看我的答案,我会怎么做instead@jack:会发生什么事?重复计算会发生吗?但这意味着distinct被视为一个组?@lijie据我所知,您不能在任何RDBMS上的同一个
select
中使用
distinct
count
等聚合。当然,你可以嵌套,这就是我在回答中所做的(你可以做
count(distinct…
但我不认为这是你的意思)我以前没有使用过Oracle,所以我不能说这在SQL Server中是否有效,但在SQL Server中这是无效的,因为t2.address和t2.state不包含在GROUP BY子句中。@Jeremy:SQL Server是一个完全不同的东西。SQL的这部分是特定于Oracle的。啊,好的。感谢您的澄清。
ID      Address      State
12345   13 Phoenix   NY
SELECT t1.Address, t1.State, COUNT(t2.address) As NumEntities
FROM TempAllAddresses t1
INNER JOIN TempAllAddresses t2
 ON t1.state = t2.state
 AND T2.Address LIKE t1.address + '%'
GROUP BY t1.State, t1.Address
13 Phoenix    NY    3
13 Phoenix    NY    9
SELECT Address, State, 
    (SELECT Count(*)
    FROM TempAllAddresses innerQry 
    WHERE innerQry.address LIKE outerQry.address + '%' 
        AND innerQry.state = outerQry.state) As NumEntities
FROM TempAllAddresses outerQry
SELECT Orig_Address, State, COUNT(Similar_Address)
From
(
  SELECT t1.Address Orig_Address, 
         t1.State   State, 
         t2.address Similar_Address
    FROM TempAllAddresses t1
   INNER JOIN TempAllAddresses t2
      ON t1.state = t2.state
     AND T2.Address LIKE t1.address + '%'
     AND t1.address <> t2.address
)
GROUP BY State, Orig_Address
SELECT t1.Address, t1.State, COUNT(distinct t2.id) As NumEntities
FROM TempAllAddresses t1
INNER JOIN TempAllAddresses t2
 ON t1.state = t2.state
 AND T2.Address LIKE t1.address + '%'
GROUP BY t1.State, t1.Address
SELECT t1.Address, t1.State, COUNT(t2.address) As NumEntities
FROM TempAllAddresses t1
INNER JOIN TempAllAddresses t2
 ON t1.state = t2.state
 AND T2.Address LIKE t1.address + '%'
GROUP BY t1.State, t1.Address
SELECT Address, State, 
    (SELECT Count(*)
    FROM TempAllAddresses innerQry 
    WHERE innerQry.address LIKE outerQry.address + '%' 
        AND innerQry.state = outerQry.state) As NumEntities
FROM TempAllAddresses outerQry
SELECT t1.Address, t1.State, COUNT(t2.address) As NumEntities
FROM (select distinct Address, State from TempAllAddresses) t1
INNER JOIN TempAllAddresses t2
 ON t1.state = t2.state
 AND T2.Address LIKE t1.address + '%'
GROUP BY t1.State, t1.Address
SELECT Address, State, count(1) As NumEntities
FROM ( 
    SELECT min(t1.Address) as Address, t1.State
    FROM TempAllAddresses t1
    INNER JOIN TempAllAddresses t2
     ON t1.state = t2.state
     AND T2.Address LIKE t1.address + '%'
    GROUP BY t1.State, t2.Address
) GROUP By State, Address
SELECT t1.Address, t1.State, 
COUNT(t2.address) OVER (PARTITION BY t2.state) As NumEntities
FROM TempAllAddresses t1
INNER JOIN TempAllAddresses t2
ON t1.state = t2.state
AND T2.Address LIKE t1.address + '%'
GROUP BY t1.State, t1.Address
DECLARE @TempAllAddresses TABLE
(
    ID INT PRIMARY KEY IDENTITY(1, 1) NOT NULL
    , [Address] VARCHAR(250) NOT NULL
    , [State] CHAR(2) NOT NULL
)

INSERT INTO @TempAllAddresses
VALUES ('13 Phoenix', 'NY')
        , ('13 Phoenix St', 'NY')
        , ('13 Phoenix Street', 'NY')
        , ('1845 Test', 'TN')
        , ('1337 Street', 'WA')
        , ('1845 T', 'TN')

SELECT
    TempAddresses.ID
    , TempAddresses.[Address]
    , TempAddresses.[State]
    , TempAddressesCounted.AddressCount
FROM @TempAllAddresses TempAddresses
CROSS APPLY
(
    SELECT
        COUNT(*) AS AddressCount
    FROM @TempAllAddresses TempAddressesApply
    WHERE TempAddressesApply.[Address] LIKE (TempAddresses.[Address] + '%')
        AND TempAddressesApply.[State] = TempAddresses.[State]
) TempAddressesCounted

SELECT
    TempAddresses.ID
    , TempAddresses.[Address]
    , TempAddresses.[State]
    , COUNT(*) AS AddressCount
FROM @TempAllAddresses TempAddresses
INNER JOIN @TempAllAddresses TempAddressesJoin
    ON TempAddressesJoin.[Address] LIKE (TempAddresses.[Address] + '%')
            AND TempAddressesJoin.[State] = TempAddresses.[State]
GROUP BY TempAddresses.ID
    , TempAddresses.[Address]
    , TempAddresses.[State]